3

タイトルが示すように、Python-gtk でマウスとキーボードのイベントをキャプチャしようとしています。

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
4

2 に答える 2

4

これは私がちょうどあなたがそれに基づくことができることをした例です:

import gtk


def on_key_press(widget, data=None):
    print "click"

if __name__ == '__main__':
    w = gtk.Window()

    # Connect the callback on_key_press to the signal key_press.
    w.connect("key_press_event", on_key_press)
    # Make the widget aware of the signal to catch.
    w.set_events(gtk.gdk.KEY_PRESS_MASK)

    w.show_all()

    gtk.main()

今すぐスクリプトを起動し、キーワードキーとボイラー(出力)をクリックします。

$ python gtk_script.py 
click
click
click
click

これがお役に立てば幸いです

于 2010-12-27T22:40:18.493 に答える
0

これはプレーンな Gtk を使用して行うことはできず、Xlib またはサーバー自体との他の形式の通信を使用する必要があると思います。アプリがルート ウィンドウ自体で実行されている場合を除きます。

もちろん、私は間違っている可能性があります。

于 2011-03-04T12:21:00.363 に答える