如何在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”。 首先安装它。