我曾经开始学习 PyGtk 和 Glade 教程,但从未完成。最近我发现 PyGtk 正在被弃用,取而代之的是使用自省https://wiki.ubuntu.com/MeetingLogs/appdevweek1104/GObjectIntrospection和https://wiki.ubuntu.com/MeetingLogs/appdevweek1104/PyGI。我决定尝试用新方法再次学习更多 Python 和 Gtk。我链接到的页面似乎展示了如果我想在代码中创建 GUI,你会怎么做,但我喜欢使用 Glade。有没有办法做到这一点,同时仍然使用新的自省?
答案1
是的,事实上它几乎完全相同:
from gi.repository import Gtk
class Test (object):
def __init__(self):
self.builder = Gtk.Builder()
self.builder.add_from_file("test.glade")
self.builder.connect_signals(self)
def run(self, *args):
self.builder.get_object("window1").show()
Gtk.main()
def quit(self, *args):
Gtk.main_quit()
Test().run()
许多较小的程序转换起来并不费力。您可以先使用以下两行切换到 gobject 自省,然后通过在参考中查找来纠正任何错误。
from gi.repository import Gtk as gtk
from gi.repository import Gobject as gobject
例如,当您使用自省时gtk.RESPONSE_OK
将被调用。Gtk.ResponseType.OK
答案2
请记住,您需要 Glade 3.10 或更新版本才能构建 GTK 3 界面。3.8 或更早版本适用于 GTK 2。在 Ubuntu 中,这些软件包被称为glade
和glade-gtk2
。
如果您需要将(旧)PyGTK 应用程序转换为 PyGI,则应尝试使用 PyGObject tarball 附带的 pygi-convert 脚本。在很多情况下,这足以转换您的应用程序。它也可以在 GIT 中找到:http://git.gnome.org/browse/pygobject/tree/pygi-convert.sh
以下链接也应该有助于对发生常见变化的一些基本解释:https://live.gnome.org/PyGObject/IntrospectionPorting
最后,这里有一个(非常好的)创建 PyGI 教程的努力:http://readthedocs.org/docs/python-gtk-3-tutorial/en/latest/index.html
我发现在构建某些东西时查看 C 文档很有用:http://developer.gnome.org/gtk3/
一旦您了解了 Python 中所有操作的原理,那么对于尚未记录的内容,这可以成为非常好的资源。让我们看一下另一个答案中给出的 gtk.RESPONSE_OK 示例。转到 C 文档时,您会发现以下内容:http://developer.gnome.org/gtk3/3.2/GtkDialog.html#GtkResponseType
取枚举名称(GtkResponseType)并用点分隔“Gtk”部分并添加不带 GTK_* 部分的枚举类型,这样您将得到:Gtk.ResponseType.OK
这适用于我遇到的所有枚举。