我们正尝试将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
有任何建议或其他方式来做这个端口吗?
答案 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.glade
。 git 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
信号,或者检查哪些小部件已被杀死和替换。
然后尝试运行,修复错误,冲洗,重复。