曾经a post on preventing window overlap with Gtk+2.x最近Gtk + 3的变化影响了gdk_property_change()
函数,它具有与Gdk.property_change()
等价的PyGobject Introspection(以下简称PyGI)。在之前的SO回答中,property_change
参数的类型(str,str,Gdk.PROP_MOD_ *,int,data),Gtk + 3等价物要求(GdkWindow,GdkAtom,GdkAtom,int,GdkPropMode,data ,int)。传递GdkAtom作为参数而不是字符串似乎是新的要求。
可以使用gtk.gdk.atom_intern(str)
方法使用PyGtk创建新的Gdk.Atom。相应的C函数in the documentation是gdk_atom_intern()
。但是在PyGI中没有这样的方法:仅仅dir(Gtk)
将返回Gdk.Atom或Gdk.atom_name但不返回Gdk.atom_intern。 Gdk.Atom也没有明显的方法。 PS:似乎正在阅读this code at line 139但Gdk.atom_intern()
可用。
你知道如何用Gtk + 3使用PyGI创建(或了解如何创建)Gdk.Atom吗?
感谢。
答案 0 :(得分: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
从存储库安装它。