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

2 投票
1 回答
848 浏览
提问于 2025-04-16 18:08

背景:

曾经有一篇关于如何防止窗口重叠的帖子,使用的是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 个回答

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

撰写回答