3

我们正在尝试将此程序从 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

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

4

1 回答 1

5

首先,试着了解你在做什么。阅读GTK+ 3 官方 Python 基础教程。你会看到正确的导入顺序是:

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

pygi-convert.sh不是灵丹妙药,您必须了解这些变化并对其进行审查。例如,本节中的导入肯定是错误的。顺序不正确,你还有一个import gtkimport 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-event到信号,或者检查哪些小部件已被杀死和替换。draw

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

于 2018-02-26T10:11:18.613 回答