正如标题所述,我正在尝试使用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
答案 0 :(得分:3)
以下是我刚刚做过的一个例子,你可以根据它做出:
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()
立即启动脚本并点击任意关键字keyetvoilà(输出):
$ python gtk_script.py
click
click
click
click
希望这可以提供帮助
答案 1 :(得分:0)
我猜这不能使用普通的Gtk完成,你必须让Xlib或其他形式的通信与服务器本身。除非您的应用程序在根窗口中运行。
当然,我错了。