どのようにUbuntuのではPyGTKやGTKでリスト開かれたウィンドウを取得しますか?
-
21-09-2019 - |
質問
どのようにPyGTKのか、GTKまたは他のプログラミング言語のリスト開かれたウィンドウを取得するには? Ubuntuのでは?
を編集します:
の私は、デスクトップ上のリストのパスに開かれたディレクトリを取得したい!
解決
あなたはおそらくlibwnckを使用したい:
http://library.gnome.org/devel/libwnck/stable/
私のpython-GNOMEまたはいくつかの同様のパッケージでのpythonバインディングがあると信じています。
:あなたはGTK +のメインループで実行をしたら、は、次の操作を行うことができます
import wnck window_list = wnck.screen_get_default().get_windows()
そのリストからウィンドウ上のいくつかの興味深い方法がget_nameある()およびアクティベート()。
あなたがボタンをクリックすると、このコンソールにウィンドウの名前を印刷します。しかし、いくつかの理由のために私はボタンを2回クリックする必要がありました。これは、私はおそらく何かが欠けているように、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()
他のヒント
2013へようこそ!ここで廃止PyGTKの方法の代わりにWnck
とその現代的なGObjectのイントロスペクションのライブラリを使用してコードです。
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のイントロスペクションを使用しての全体のポイントは、すべての言語で同じ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()
おかげサンディ!
コマンドライン出力を解析することが最善の方法ではありません、あなたはバージョンまたはplatfrom異なる可能性があり、そのプログラムの出力が変化していないに依存しています。ここでは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の1であるかどうかを確認する方法がわかりません。しかし、あなたは「wmctrl -l」現在開いて試してどのように多くのウィンドウをチェックしたい場合。最初のコースのそれをインストールします。
からPyGTKを参照するます:
gtk.gdk.window_get_toplevels()
gtk.gdk.window_get_toplevels()
この関数は、すべてのリストを返します。 上のPyGTKのに知られているトップレベルのウィンドウ デフォルト画面。トップレベルウィンドウがあります ルートウィンドウの子(参照gtk.gdk.get_default_root_window()
機能)。