如何在Ubuntu中获取PyGTK或GTK打开的窗口列表?
如何在Ubuntu中使用PyGTK、GTK或其他编程语言获取打开的窗口列表?
编辑:
我想获取桌面上打开的文件夹路径列表!
6 个回答
4
不管出什么原因,我无法发评论,但我想把这个作为对Sandy回答的补充。
这里有一段代码,可以在控制台上列出当前打开的窗口:
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()
谢谢你,Sandy!
13
欢迎来到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 的主要目的就是让不同编程语言之间有相同的接口,这要归功于 gir
绑定。
另外,Ubuntu 系统自带了 wnck
及其对应的 gir
绑定,但如果你需要安装它们的话:
sudo apt-get install libwnck-3-* gir1.2-wnck-3.0
这也会安装 libwnck-3-dev
,虽然这个不是必须的,但它会安装一些有用的文档,你可以通过 DevHelp 来阅读。
10
你可能想用libwnck这个库:
http://library.gnome.org/devel/libwnck/stable/
我记得在python-gnome或者类似的包里有Python的接口。
一旦你启动了GTK+的主循环,你可以这样做:
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()