タイトルとして、私はPython-gtkでMouseおよびKeyboardイベントをキャプチャしようとしています。デスクトップ上のキーボード/マウスイベント/ Linux上のpygtk(gtk.gdk)を持つルートウィンドウ
私はとのpython-のXlibでこれを簡単に行うことができます。
self.display = display.Display()
self.screen = self.display.screen()
self.root_window = self.screen.root
self.root_window.grab_pointer(1,
X.ButtonPressMask | X.ButtonReleaseMask | X.Button1MotionMask,
X.GrabModeAsync,
X.GrabModeAsync,
X.NONE, X.NONE,
X.CurrentTime)
self.root_window.grab_keyboard(1,
X.GrabModeAsync,
X.GrabModeAsync,
X.CurrentTime)
私は機能* gtk.gdkを使用してアナログを参照してください、私はちょうどメインのデスクトップウィンドウ上のイベントをキャプチャするように見えることはできません。これはできますか?
これは私が仕事を達成しようとしていた方法です...(ALL_EVENTS_MASKは絶望の行為だった;])ここで
self.root_window = gtk.gdk.get_default_root_window()
self.root_window.set_events(gtk.gdk.ALL_EVENTS_MASK)
gtk.gdk.event_handler_set(self.filter_callback)
gtk.main()
def filter_callback (self, *args):
print args
これは既に含まれているサンプルコードの軽いバージョンです。また、gtkウィンドウです。 gtk.gdkウィンドウが必要です...この場合、単純なアプリケーションウィンドウではなく、全デスクトップ。私の問題はささいなことでしょう。 – digitalfoo
@lsthree:ここで、set_events()を呼び出しますか?あなたのケースgtk.gdk.Windowにウィジェットを作成した直後に呼び出す必要があります。 – mouad
ああ!おっと、私が以前見たことがあるとき、私はイベントメソッドの名前が同じだと思った。私は追加しましたが、問題はまだ残っています。たとえば、key_press、button_pressなどをデスクトップのルートウィンドウに接続することはできません。 'self.root_window.set_events(gtk.gdk.ALL_EVENTS_MASK)'は、別のウィンドウにフォーカスを当てるときや、ウィンドウを最小化/最大化するときのようなイベントを与えます。私はキーボードとマウスのイベントを取得する必要があります。 – digitalfoo