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

时间:2018-02-25 08:59:03

标签: python python-3.x gtk pygtk pyobject

我们正尝试将this program从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

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

1 个答案:

答案 0 :(得分:2)

首先,尝试了解您正在做的事情。阅读official Python for GTK+ 3 tutorial的基础知识。您将看到执行导入的正确顺序是:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

pygi-convert.sh不是灵丹妙药,您必须了解这些变化并进行审核。例如,this section中的导入肯定是错误的。订单不正确,您仍然在import gtk行上留下import gtk,Gtk.gladegit grep -w gtk可以帮助您找到代码中出现的所有小写gtk,应删除或替换。

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

查看Python GTK+ 3 API以了解可用的内容,并查看C迁移指南(不知道python资源,抱歉)what has changed between GTK+ 2 and GTK+ 3。大多数事情都不适用于python,但有些人会这样做。例如,在进行自定义绘图时,从旧的expose-event迁移到draw信号,或者检查哪些小部件已被杀死和替换。

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