2011-02-08 18 views
4

現在開いているすべてのウィンドウのリストを取得する方法はありますか?また、Pythonのウィンドウが一番上にある(アクティブな)のか確認する方法はありますか?Gnome/Linux/UbuntuでPythonのどのウィンドウがアクティブになっていますか?

これは、Ubuntu LinuxでGnomeを使用しています。

wnckはこれを行う可能性がありますが、ドキュメントには欠けています。

+3

[Cドキュメント](http://library.gnome.org/devel/libwnck/stable/)または[Perl documentation](http://gtk2-perl.sourceforge.net/)を使用して読むことができるドキュメントdoc/pod/Gnome2/Wnck/index.html)はおそらくあなたが必要とするものです。 Pythonはそれほど違いはありません。 –

+0

[Pythonを使用してアクティブウィンドウを取得する](http://stackoverflow.com/a/36419702/562769)を参照してください。 –

答えて

8
import wnck 
screen = wnck.screen_get_default() 
window_list = screen.get_windows() 
active_window = screen.get_active_window() 

Get active window title in XおよびWnckScreenも参照してください。その他のquestions containing wnckには便利なコードサンプルがあります。 Libwnck Reference Manualをチェックアウトし、ドキュメントについては

from gi.repository import Gtk, Wnck 

Gtk.init([]) # necessary if not using a Gtk.main() loop 
screen = Wnck.Screen.get_default() 
screen.force_update() # recommended per Wnck documentation 

window_list = screen.get_windows() 
active_window = screen.get_active_window() 

+2

このウィンドウがアクティブでなくなっても、繰り返しクエリを実行すると常に同じウィンドウが返されます。状態を更新するには、Gtkイベントキューをフラッシュし、 'get_active_window'を呼び出す前に' force_update'を明示的に呼び出さなければなりません。この要点を例に挙げてみましょう。https://gist.github.com/adewes/6960581 – ThePhysicist

10

はここで代わりにジョシュ・リーが掲示廃止PyGTKの方法の近代的なGObjectのイントロスペクションライブラリを使用して同じコードです。これはPythonに特有のものではありませんが、GObjectイントロスペクションを使用することの全ポイントは、girバインディングのおかげで、すべての言語で同じAPIを使用することです。また

、箱から出して結合両方 wnckとそれに対応する girとUbuntuの船が、あなたがそれらをインストールする必要がある場合:

sudo apt-get install libwnck-3-* gir1.2-wnck-3.0 

また、これは必要ありませんこれは、libwnck-3-devがインストールされますが、便利なインストールされます。 DevHelp

+2

これは本当の最新の答えだと思います。ありがとう。 – jonS90

+0

@MestreLion Hm。面白い。わかりました、私のコードが問題のようです。私は私の賞賛を削除しました。助けてくれてありがとう! –

関連する問題