PyGTK、GTK、または他のプログラミング言語で開いているウィンドウのリストを取得するには? Ubuntuで?
編集:
デスクトップで開いているディレクトリのパス一覧を取得したい!
PyGTK、GTK、または他のプログラミング言語で開いているウィンドウのリストを取得するには? Ubuntuで?
編集:
デスクトップで開いているディレクトリのパス一覧を取得したい!
2013年へようこそ!Wnck
非推奨になった PyGTK メソッドの代わりに、最新の GObject Introspection ライブラリを使用するコードを次に示します。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 Reference Manual を参照してください。gir
これは Python に固有のものではありませんが、GObject Introspection を使用することの全体的なポイントは、バインディングのおかげで、すべての言語で同じ API を持つことです。
wnck
また、Ubuntu には両方とそれに対応するバインディングがそのまま付属してgir
いますが、それらをインストールする必要がある場合は、次のようにします。
sudo apt-get install libwnck-3-* gir1.2-wnck-3.0
これは必須ではありませんが、 DevHelplibwnck-3-dev
を使用して読むことができる便利なドキュメントをインストールします。
おそらくlibwnckを使用したいと思うでしょう:
http://library.gnome.org/devel/libwnck/stable/
python-gnomeまたは同様のパッケージにpythonバインディングがあると思います。
GTK +メインループを実行したら、次のことができます。
wnckをインポートする window_list = wnck.screen_get_default()。get_windows()
そのリストのウィンドウにあるいくつかの興味深いメソッドは、get_name()とactivate()です。
これにより、ボタンをクリックしたときにウィンドウの名前がコンソールに出力されます。しかし、どういうわけか私はボタンを2回クリックしなければなりませんでした。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( "clicked"、self.on_btn_click、None) self.window.add(self.button) self.window.show_all() def main(self): 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」を試してください。もちろん最初にインストールします。