Как получить список открытых окон в PyGTK или GTK или другом языке программирования? в убунте?
изменить:
я хочу получить список путей к открытым каталогам на рабочем столе!
Как получить список открытых окон в PyGTK или GTK или другом языке программирования? в убунте?
изменить:
я хочу получить список путей к открытым каталогам на рабочем столе!
Вероятно, вы захотите использовать libwnck:
http://library.gnome.org/devel/libwnck/stable/
Я считаю, что в python-gnome или каком-то подобном пакете есть привязки python.
Когда у вас запущен основной цикл GTK+, вы можете сделать следующее:
import wnck window_list = wnck.screen_get_default().get_windows()
Некоторые интересные методы для окна из этого списка — это get_name() и активировать().
Это напечатает имена окон в консоли, когда вы нажмете кнопку. Но по какой-то причине мне пришлось нажать кнопку дважды. Это мой первый раз, когда я использую 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 Introspection вместо устаревшего метода 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
, что не обязательно, но установит полезную документацию, которую вы можете прочитать, используя DevHelp.
wnck.screen_get_default()
нет. Хотя этот ответ новее другого, я думаю, что это должен быть принятый ответ, поскольку старый больше не работает. 15.08.2015 По какой-то причине я не могу опубликовать комментарий, но я хотел бы добавить это как дополнение к ответу Сэнди.
Вот фрагмент кода, в котором перечислены текущие окна в консоли:
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
Обратите внимание, что этот список будет содержать окна, которые вы обычно не классифицируете как «окна», но это не имеет значения для того, что вы пытаетесь сделать.
Я действительно не знаю, как проверить, является ли окно окном GTK. Но если вы хотите проверить, сколько окон открыто в данный момент, попробуйте «wmctrl -l». Установите его в первую очередь, конечно.
gtk.gdk.window_get_toplevels()
Функция
gtk.gdk.window_get_toplevels()
возвращает список всех окон верхнего уровня, известных PyGTK, на экране по умолчанию. Окно верхнего уровня является потомком корневого окна (см. функциюgtk.gdk.get_default_root_window()
).
screen.force_update()
. См. Общие ошибки в developer.gnome.org/libwnck/stable/getting-started. html 17.03.2012