Я немного смущен некоторыми понятиями gtk и gnome. Я пытаюсь получить список не минимизированных окон на рабочем столе gnome2, но после прочтения документации pygtk и проверки результатов я не могу понять результаты.Как получить список всех окон на рабочем столе gnome2 с помощью pygtk?
Ни один из двух фрагментов ниже не работает.
Сначала я попробовал это ..
>>> gtk.gdk.window_get_toplevels()
[<gtk.gdk.Window object at 0xb74339b4 (GdkWindow at 0x8a4c170)>]
>>> gtk.gdk.window_get_toplevels()[0].get_children()
[]
этот
>>> d = gtk.gdk.DisplayManager()
>>> d.get_default_display().get_screen(0).get_root_window().get_children()
[<gtk.gdk.Window object at 0x89dcc84 (GdkWindow at 0x8a4c170)>, <gtk.gdk.Window object at 0x89dccac (GdkWindow at 0x8a4c0c0)>]
Как видно на выходе консоли, второй вариант возвращает два окна. Но я не мог понять, кто они. Ни у кого из них нет детей, и я всегда получаю эти два окна независимо от того, сколько окон у меня на рабочем столе.
Может ли кто-нибудь объяснить иерархию объектов типичной среды рабочего стола на основе gtk? Не могу понять, почему приведенный выше код не работает.
Пожалуйста, воздержитесь от публикации альтернативных решений, которые могут быть использованы для wnck, xlib, qt и т. Д. Я больше заинтересован в понимании того, что я делаю неправильно, чем в получении консультаций, таких как проверка других библиотек.
Я не хочу быть грубым, но я не думаю, что ваш ответ удовлетворительный. К концу вашего ответа вы разоблачили свою первоначальную аналогию с банановым cd-считывателем. Я знаю различия между окнами gtk и dtk.gdk, если вы внимательно прочитаете мой вопрос, вы заметите, что это было немного не по теме ... хотя я упоминал, что я был в замешательстве, поэтому я думаю, что я требовать mea-culpa. – Pico
Я предполагаю, что нижняя строка - это почему 'gtk.gdk.window_get_toplevels()' вывод результата, который вы описали? Что касается сортировки окон, у меня создалось впечатление, что у них есть атрибуты для этой единственной цели. – Pico
Ок, я думаю, я интерпретировал ваш вопрос, чтобы понять, почему вы не можете получить дочерние _widgets_ из окон. Я не знаю, почему вызов GDK не делает то, что вы хотите. Возможно, вам стоит взглянуть на исходный код libwnck, чтобы увидеть, как он работает там? – ptomato