كيفية الحصول على قائمة Windows المفتوحة في Pygtk أو GTK في Ubuntu؟

StackOverflow https://stackoverflow.com/questions/1380784

سؤال

كيفية الحصول على قائمة Windows المفتوحة في Pygtk أو GTK أو لغة البرمجة الأخرى؟ في أوبونتو؟

تعديل:

أريد الحصول على مسارات قائمة فتحات على سطح المكتب!

هل كانت مفيدة؟

المحلول

ربما تريد استخدام libwnck:

http://library.gnome.org/devel/libwnck/stable/

أعتقد أن هناك روابط بيثون في Python-Gnome أو حزمة مماثلة.

بمجرد تشغيل GTK+ Mainloop ، يمكنك القيام بما يلي:

import wnck
window_list = wnck.screen_get_default().get_windows()

بعض الأساليب المثيرة للاهتمام على النافذة من تلك القائمة هي get_name () وتفعيل ().

سيؤدي ذلك إلى طباعة أسماء Windows إلى وحدة التحكم عند النقر فوق الزر. لكن لسبب ما اضطررت إلى النقر فوق الزر مرتين. هذه هي المرة الأولى التي أستخدم فيها 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. إنه ليس خاصًا ببيثون ، ولكن الهدف الكامل من استخدام تأمل goBject هو أن يكون لديه نفس API عبر جميع اللغات ، وذلك بفضل gir روابط.

أيضا ، يشحن أوبونتو مع كليهما wnck ومقابلته gir الربط خارج الصندوق ، ولكن إذا كنت بحاجة إلى تثبيتها:

sudo apt-get install libwnck-3-* gir1.2-wnck-3.0

سيؤدي هذا أيضًا إلى تثبيت libwnck-3-dev, ، وهو أمر غير ضروري ولكنه سيقوم بتثبيت وثائق مفيدة يمكنك قراءتها باستخدام Devhelp

لأي سبب من الأسباب ، لا يمكنني نشر تعليق ، لكنني أود إضافة هذا كإضافة إلى إجابة ساندي.

إليك جزءًا كبيرًا من التعليمات البرمجية التي تسرد النوافذ الحالية على وحدة التحكم:

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()

شكرا ساندي!

عادةً ما يكون إخراج سطر الأوامر هو أفضل طريقة ، فأنت تعتمد على عدم تغيير إخراج البرامج ، والتي قد تختلف من الإصدار أو platfrom. إليك كيفية القيام بذلك باستخدام 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 التي لن تصنفها عادةً على أنها "Windows" ، لكن هذا لا يهم ما تحاول القيام به.

لا أعرف حقًا كيفية التحقق مما إذا كانت النافذة عبارة عن GTK. ولكن إذا كنت ترغب في التحقق من عدد Windows الذي يتم فتحه حاليًا ، حاول "WMCTRL -L". تثبيته أولاً بالطبع.

من عند مرجع pygtk:

gtk.gdk.window_get_toplevels()

ال gtk.gdk.window_get_toplevels()تقوم الدالة بإرجاع قائمة بجميع Windows Toplevel المعروفة بـ Pygtk على الشاشة الافتراضية. نافذة Toplevel هي طفل من نافذة الجذر (انظر gtk.gdk.get_default_root_window()وظيفة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top