如何获得在PyGTK或GTK在Ubuntu打开窗口列表?

如何在PyGTK或GTK或其他编程语言中打开列表窗口? 在Ubuntu中?

编辑:

我想获得列表path在桌面上打开目录!

你可能想要使用libwnck:

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

我相信有python绑定在python-gnome或一些类似的包。

一旦运行GTK +主循环,您可以执行以下操作:

导入wnck
 window_list = wnck.screen_get_default()。get_windows()

从这个列表的窗口上的一些有趣的方法是get_name()和activate()。

这将打印窗口的名称,当你点击按钮的控制台。 但由于某种原因,我不得不点击按钮两次。 这是我第一次使用libwnck,所以我可能错过了一些东西。 🙂

导入pygtk
 pygtk.require( '2.0')
导入gtk,wnck

 class Windowlistr:
     def on_btn_click(self,widget,data = None):
         window_list = wnck.screen_get_default()。get_windows()
        如果len(window_list)== 0:
            打印“找不到Windows”
        为了赢得window_list:
            打印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()

如果__name__ ==“__main__”:
     lister = Windowlistr()
     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

无论出于何种原因,我都不能发表评论,但我想补充一点,作为桑迪的回答。

以下是一个列出控制台上当前窗口的代码块:

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

谢谢桑迪!

从PyGTK参考 :

gtk.gdk.window_get_toplevels()

gtk.gdk.window_get_toplevels()函数返回默认屏幕上PyGTK已知的所有顶层窗口的列表。 顶层窗口是根窗口的子窗口(请参阅gtk.gdk.get_default_root_window()函数)。

解析命令行输出通常不是最好的方法,你依赖于那些程序输出不会改变,这可能会从版本或平台不同。 这里是如何使用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”。 首先安装它。