ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

python-Linux上具有pygtk(gtk.gdk)的桌面/根窗口上的键盘/鼠标事件

2019-12-08 22:50:58  阅读:328  来源: 互联网

标签:gtk pygtk gdk linux python


如标题所示,我正在尝试使用Python-gtk捕获Mouse和Keyboard事件.

我可以使用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

解决方法:

这是我刚刚做过的一个示例,您可以基于此示例:

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

希望这可以帮助

标签:gtk,pygtk,gdk,linux,python
来源: https://codeday.me/bug/20191208/2094702.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有