Как получить список открытых окон в PyGTK или GTK в Ubuntu?
-
21-09-2019 - |
Вопрос
Как получить список открытых окон на PyGTK или GTK или другом языке программирования?в Ubuntu?
Редактировать:
я хочу получить список путей к открытым каталогам на рабочем столе!
Решение
Вы, вероятно, хотите использовать libwnck:
http://library.gnome.org/devel/libwnck/stable/
Я полагаю, что в python-gnome или каком-то подобном пакете есть привязки python.
После запуска GTK + mainloop вы можете выполнить следующее:
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()
Другие советы
Добро пожаловать в 2013 год!Вот код, использующий Wnck
и его современные библиотеки самоанализа GObject вместо ныне устаревшего метода PyGTK.Вы также можете проверить мой другой ответ о wnck:
from gi.repository import Gtk, Wnck
Gtk.init([]) # necessary only if not using a Gtk.main() loop
screen = Wnck.Screen.get_default()
screen.force_update() # recommended per Wnck documentation
# loop all windows
for window in screen.get_windows():
print window.get_name()
# ... do whatever you want with this window
# clean up Wnck (saves resources, check documentation)
window = None
screen = None
Wnck.shutdown()
Что касается документации, ознакомьтесь с Справочное руководство Libwnck.Это не специфично для python, но весь смысл использования GObject Introspection заключается в том, чтобы иметь один и тот же API на всех языках, благодаря gir
привязки.
Кроме того, Ubuntu поставляется с обоими wnck
и его соответствующий gir
привязки из коробки, но если вам нужно их установить:
sudo apt-get install libwnck-3-* gir1.2-wnck-3.0
Это также приведет к установке libwnck-3-dev
, который не является необходимым , но установит полезную документацию , которую вы можете прочитать с помощью Помощь разработчику
По какой-то причине я не могу опубликовать комментарий, но я хотел бы добавить это в качестве дополнения к ответу Сэнди.
Вот фрагмент кода, в котором перечислены текущие окна на консоли:
import pygtk
pygtk.require('2.0')
import gtk, wnck
if __name__ == "__main__":
default = wnck.screen_get_default()
while gtk.events_pending():
gtk.main_iteration(False)
window_list = default.get_windows()
if len(window_list) == 0:
print "No Windows Found"
for win in window_list:
if win.is_active():
print '***' + win.get_name()
else:
print win.get_name()
Спасибо, Сэнди!
Анализ выходных данных командной строки обычно не самый лучший способ, вы зависите от того, что выходные данные программ не меняются, что может варьироваться в зависимости от версии или платформы.Вот как это сделать с помощью 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
Обратите внимание, что в этом списке будут содержаться окна, которые вы обычно не классифицируете как "windows", но это не имеет значения для того, что вы пытаетесь сделать.
Я действительно не знаю, как проверить, является ли окно GTK.Но если вы хотите проверить, сколько окон открыто в данный момент, попробуйте "wmctrl -l".Конечно, сначала установите его.
От ссылка на PyGTK:
gtk.gdk.window_get_toplevels()
В
gtk.gdk.window_get_toplevels()
функция возвращает список всех окон верхнего уровня, известных PyGTK на экране по умолчанию .Окно верхнего уровня является дочерним по отношению к корневому окну (см.gtk.gdk.get_default_root_window()
функция).