Как я могу получить список окон с помощью Wnck, используя PyGI?

Я только начал использовать PyGI (в Ubuntu Natty), хотя никогда раньше не использовал pygtk. Однако я использовал wnck в программе wxPython, и было достаточно просто получить список открытых в данный момент окон. Из PyGI список окон всегда пуст. соответствующие биты кода:

from gi.repository import Gtk, Wnck

while Gtk.events_pending():
    Gtk.main_iteration()
#... in my app class...
    screen = Wnck.Screen.get_default()
    wins = screen.get_windows()

с этим, wins == []. Спасибо!


person crazedpsyc    schedule 26.04.2011    source источник
comment
Спасибо, помидор! Как я могу сделать это сам?   -  person crazedpsyc    schedule 27.04.2011


Ответы (2)


Вам нужно вызвать screen.force_update() до того, как screen.get_windows() вернет список окон. К сожалению, в документах отсутствует эта часть :(

In [1]: from gi.repository import Gtk, Wnck

In [2]: Gtk.main_iteration()
Out[2]: True

In [3]: screen = Wnck.Screen.get_default()

In [4]: screen.force_update()

In [5]: screen.get_windows()
Out[5]: 
[<Window object at 0x167bd20 (WnckWindow at 0x195d0e0)>,
 <Window object at 0x167bf00 (WnckWindow at 0x195d740)>,
 <Window object at 0x167bf50 (WnckWindow at 0x195d850)>]
person plaes    schedule 23.05.2011
comment
Не могли бы вы поделиться ссылкой на доступный документ? я не смог найти - person ganesshkumar; 23.10.2013
comment
Упоминается в разделе «Примеры»: developer.gnome.org/libwnck/stable/getting- start.html - person Cas; 18.08.2015
comment
Похоже, это не работает для новых окон, открытых с момента первого запуска скрипта. Есть ли что-то еще, что нужно сделать? - person Ben Davis; 11.12.2018

В вашем примере вы должны использовать: Gtk.main_iteration_do(False) вместо Gtk.main_iteration().

person gpoo    schedule 28.04.2011