2

语境:

曾经有一篇关于防止窗口与 Gtk+2.x 重叠的帖子然而最近 Gtk+3 的更改影响了该gdk_property_change()功能,该功能具有相当于Gdk.property_change(). 在前面的 SO 答案中,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 也没有明显的方法。PS:似乎可以在第 139 行阅读此代码Gdk.atom_intern()

问题:

你知道我如何使用 PyGI 和 Gtk+3 创建(或了解如何创建)一个 Gdk.Atom 吗?

谢谢。

4

1 回答 1

0

可能是 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.

于 2011-05-22T22:16:59.820 回答