Создайте Gtk.Atom с помощью PyGobject Introspection и Gtk + 3 - PullRequest
2 голосов
/ 22 мая 2011

Контекст:

Однажды была запись о предотвращении перекрытия окон с помощью Gtk + 2.x Однако недавние изменения в Gtk + 3 повлияли на gdk_property_change() функция, которая имеет самоанализ PyGobject (далее именуемый PyGI), эквивалентный Gdk.property_change().В предыдущем ответе SO аргументы property_change были типа (str, str, Gdk.PROP_MOD_ *, int, data), вместо них Gtk + 3 эквивалентно запрашивает (GdkWindow, GdkAtom, GdkAtom, int, GdkPropMode, data, int).Передача GdkAtom в качестве аргумента, а не строки, кажется новым требованием.

Проблема:

Новый Gdk.Atom может быть создан с помощью PyGtk с помощью метода gtk.gdk.atom_intern(str).Соответствующая функция C в документации равна gdk_atom_intern().Однако в PyGI такого метода нет: простой dir(Gtk) вернет Gdk.Atom или Gdk.atom_name, но не Gdk.atom_intern.У Gdk.Atom также нет очевидного метода. PS: кажется, читая этот код в строке 139 , что Gdk.atom_intern() будет доступен, хотя.

Вопрос:

Знаете ли вы, как яМожно ли создать (или узнать, как создать) Gdk.Atom, используя PyGI с Gtk + 3?

Спасибо.

1 Ответ

0 голосов
/ 23 мая 2011

Возможно, что Gobject-Introspection получает Gdk из версии Gtk + -2.0, поэтому вам нужно принудительно установить версию:

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.

...