如何将 Python 程序从 gtk2 移植到 gtk3?

Dan*_*yal 3 python gtk pygtk python-3.x pyobject

我们正在尝试将这个程序从 gtk2 移植到 gtk3。当我尝试时pygi-convert.sh,出现以下错误:

Traceback (most recent call last):
  File "scripts/amir", line 53, in <module>
    from gi.repository import GObject
  File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 39, in <module>
    raise ImportError(_static_binding_error)
ImportError: When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject". See: https://bugzilla.gnome.org/show_bug.cgi?id=709183
Run Code Online (Sandbox Code Playgroud)

任何建议或其他方式来做这个端口?

lib*_*rce 5

首先,试着理解你在做什么。阅读官方 Python for GTK+ 3 教程的基础知识。您将看到执行导入的正确顺序是:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
Run Code Online (Sandbox Code Playgroud)

pygi-convert.sh没有银弹,你必须了解的变化和审查。例如,本节中的导入肯定是错误的。顺序不正确,你还有一个import gtk左边就import gtk,Gtk.glade行了。Agit grep -w gtk应该可以帮助您找到gtk代码中出现的所有小写​​字母,这些小写字母应该被删除或替换。

我还看到您在同一个文件中有一些代码来更改窗口主题。GTK+ 2 和 GTK+ 3 之间的主题完全改变了。GTK+ 3 使用 CSS 引擎。

查看Python GTK+ 3 API以了解可用的内容,并查看 C 迁移指南(不知道 Python 资源,抱歉)在 GTK+ 2 和 GTK+ 3 之间发生了什么变化。大多数事情不适用于python,但有些会。例如在进行自定义绘图时从旧的迁移expose-eventdraw信号,或检查哪些小部件已被杀死和替换。

然后尝试运行,修复错误,冲洗,重复。