どのようにUbuntuのではPyGTKやGTKでリスト開かれたウィンドウを取得しますか?

StackOverflow https://stackoverflow.com/questions/1380784

質問

どのように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のイントロスペクションのライブラリを使用してコードです。

:あなたはまた、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のイントロスペクションを使用しての全体のポイントは、すべての言語で同じ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()   機能)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top