Вопрос

Как получить список открытых окон на 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() функция).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top