如何获取 PyGTK 或 GTK 或其他编程语言中打开的窗口列表?在 Ubuntu 中?
编辑:
我想在桌面上获取列表路径打开的目录!
如何获取 PyGTK 或 GTK 或其他编程语言中打开的窗口列表?在 Ubuntu 中?
编辑:
我想在桌面上获取列表路径打开的目录!
欢迎来到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阅读
你可能想使用 libwnck:
http://library.gnome.org/devel/libwnck/stable/
我相信在 python-gnome 或一些类似的包中有 python 绑定。
运行 GTK+ 主循环后,您可以执行以下操作:
导入 wnck window_list = wnck.screen_get_default().get_windows()
该列表中窗口上的一些有趣方法是 get_name() 和 activate()。
当您单击按钮时,这会将窗口的名称打印到控制台。但由于某种原因,我不得不单击该按钮两次。这是我第一次使用 libwnck,所以我可能遗漏了一些东西。:-)
导入 pygtk pygtk.require('2.0') 导入 gtk, wnck 类WindowLister: 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("列出窗口") self.button.connect("点击", self.on_btn_click, 无) self.window.add(self.button) self.window.show_all() 定义主要(自我): gtk.main() 如果 __name__ == "__main__": lister = WindowLister() lister.main()
无论出于何种原因,我无法发表评论,但我想将其添加为桑迪答案的附录。
这是列出控制台上当前窗口的一段代码:
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
请注意,此列表将包含您通常不会归类为“窗口”的窗口,但这与您尝试执行的操作无关。
从PyGTK 参考:
gtk.gdk.window_get_toplevels()
该
gtk.gdk.window_get_toplevels()
函数在默认屏幕上返回 PyGTK 已知的所有顶级窗口的列表。顶层窗口是根窗口的子窗口(参见gtk.gdk.get_default_root_window()
函数)。
我真的不知道如何检查一个窗口是否是 GTK 的。但是,如果您想检查当前打开了多少个窗口,请尝试“wmctrl -l”。当然是先安装。