10

PyGTK、GTK、または他のプログラミング言語で開いているウィンドウのリストを取得するには? Ubuntuで?

編集:

デスクトップで開いているディレクトリのパス一覧を取得したい!

4

6 に答える 6

13

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を使用して読むことができる便利なドキュメントをインストールします。

于 2013-05-22T23:37:06.073 に答える
10

おそらく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()
于 2009-09-04T19:01:40.483 に答える
4

なんらかの理由でコメントを投稿することはできませんが、これをサンディの回答の補遺として追加したいと思います。

コンソールの現在のウィンドウを一覧表示するコードのチャンクを次に示します。

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()

ありがとうサンディ!

于 2011-02-12T01:15:48.610 に答える
3

コマンドライン出力の解析は通常、最善の方法ではありません。プログラムの出力が変更されないことに依存しています。これは、バージョンやプラットフォームによって異なる可能性があります。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

このリストには、通常は「ウィンドウ」として分類されないウィンドウが含まれることに注意してください。ただし、これは、何をしようとしているかには関係ありません。

于 2009-09-04T20:47:15.637 に答える
2

PyGTKリファレンスから:

gtk.gdk.window_get_toplevels()

このgtk.gdk.window_get_toplevels() 関数は、デフォルト画面で PyGTK に認識されているすべてのトップレベル ウィンドウのリストを返します。トップレベル ウィンドウはルート ウィンドウの子です ( gtk.gdk.get_default_root_window() 関数を参照してください)。

于 2009-09-04T18:37:30.610 に答える
2

ウィンドウが GTK かどうかを確認する方法が本当にわかりません。ただし、現在開いているウィンドウの数を確認したい場合は、「wmctrl -l」を試してください。もちろん最初にインストールします。

于 2009-09-04T18:46:50.903 に答える