用PyGobject Introspection和Gtk + 3创建Gtk.Atom

时间:2011-05-22 14:33:00

标签: python gtk window gdk pygobject

上下文:

曾经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 documentationgdk_atom_intern()。但是在PyGI中没有这样的方法:仅仅dir(Gtk)将返回Gdk.Atom或Gdk.atom_name但不返回Gdk.atom_intern。 Gdk.Atom也没有明显的方法。 PS:似乎正在阅读this code at line 139Gdk.atom_intern()可用。

问题:

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

感谢。

1 个答案:

答案 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从存储库安装它。