Из этих ответов у меня есть вид просеянных решение. Мне действительно нравится идея понятия ссылки. Повторяющиеся события могли быть связанным списком с хвостом, зная его правило повторения. Изменение одного события тогда было бы легко, потому что ссылки остаются на месте, и удаление события легко также - Вы просто расцепляете событие, удаляете его и повторно связываете событие прежде и после него. Все еще необходимо запросить повторяющиеся события каждый раз, когда кто-то смотрит на новый период времени, никогда не, смотрел на прежде на календаре, но иначе это довольно чисто.
Вероятно, вы захотите использовать libwnck:
http://library.gnome.org/devel/libwnck/stable/
Я считаю, что в python-gnome есть привязки Python или какой-то похожий пакет.
После запуска основного цикла GTK + вы можете сделать следующее:
import wnck window_list = wnck.screen_get_default().get_windows()
Некоторые интересные методы в окне из этого списка - get_name () и activate ().
Это напечатает имена окон на консоль при нажатии кнопки. Но почему-то пришлось дважды нажать кнопку. Я впервые использую libwnck, так что, наверное, что-то упускаю. : -)
import pygtk pygtk.require('2.0') import gtk, wnck class WindowLister: def on_btn_click(self, widget, data=None): window_list = wnck.screen_get_default().get_windows() if len(window_list) == 0: print "No Windows Found" for win in window_list: print win.get_name() def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.button = gtk.Button("List Windows") self.button.connect("clicked", self.on_btn_click, None) self.window.add(self.button) self.window.show_all() def main(self): gtk.main() if __name__ == "__main__": lister = WindowLister() lister.main()
Анализ вывода командной строки обычно не лучший способ, вы зависите от того, что вывод программы не меняется, что может отличаться от версии или платформы. Вот как это сделать с помощью Xlib:
import Xlib.display
screen = Xlib.display.Display().screen()
root_win = screen.root
window_names = []
for window in root_win.query_tree()._data['children']:
window_name = window.get_wm_name()
window_names.append(window_name)
print window_names
Обратите внимание, что этот список будет содержать окна, которые вы обычно не классифицируете как «окна», но это не имеет значения для того, что вы пытаетесь сделать.
Из ссылка PyGTK :
gtk.gdk.window_get_toplevels ()
gtk.gdk.window_get_toplevels ()
функция возвращает список всех окна верхнего уровня, известные PyGTK на экран по умолчанию. Окно верхнего уровня - это дочерний элемент корневого окна (см.gtk.gdk.get_default_root_window ()
функция).
Я действительно не знаю, как проверить, является ли окно GTK-окном. Но если вы хотите проверить, сколько окон открыто в данный момент, попробуйте "wmctrl -l". Конечно, сначала установите его.