使用PyGobject Introspection和Gtk+3创建Gtk.Atom
背景:
曾经有一篇关于如何防止窗口重叠的帖子,使用的是Gtk+2.x。不过,最近Gtk+3的更新影响了一个叫做 gdk_property_change()
的函数。在PyGobject Introspection(以后称为PyGI)中,这个函数对应的是 Gdk.property_change()
。在之前的回答中,property_change
的参数类型是 (str, str, Gdk.PROP_MOD_*, int, data),而在Gtk+3中,要求的参数变成了 (GdkWindow, GdkAtom, GdkAtom, int, GdkPropMode, data, int)。现在需要传递一个GdkAtom作为参数,而不是字符串,这似乎是新的要求。
问题:
可以通过PyGtk使用 gtk.gdk.atom_intern(str)
方法来创建新的Gdk.Atom。对应的C语言函数在文档中是 gdk_atom_intern()。但是在PyGI中没有这样的函数:简单地运行 dir(Gtk)
会返回Gdk.Atom或Gdk.atom_name,但没有Gdk.atom_intern。Gdk.Atom也没有明显的方法。补充说明: 看起来在 这段代码的第139行 中,Gdk.atom_intern()
似乎是可以用的。
提问:
你知道我怎么能用PyGI在Gtk+3中创建(或找到如何创建)一个Gdk.Atom吗?
谢谢。
1 个回答
可能是因为Gobject-Introspection从Gtk+-2.0版本中获取了Gdk,所以你需要强制指定版本:
In [1]: import gi
In [2]: gi.require_version("Gdk", "3.0")
In [3]: from gi.repository import Gdk
In [4]: Gdk.__path__
Out[4]: '/usr/lib64/girepository-1.0/Gdk-3.0.typelib'
In [5]: Gdk.atom_intern
Out[5]: <function atom_intern at 0x152f140>
In [6]: Gdk.atom_intern_static_string
Out[6]: <function atom_intern_static_string at 0x152f398>
为了让这个工作正常,你需要安装gir1.2-gtk-3.0这个软件包。在Ubuntu系统上,可以通过以下命令从软件库中安装:sudo apt-get install gir1.2-gtk-3.0
。