捕获 gtk.Window 内任意位置的点击

发布于 2024-09-06 10:59:59 字数 352 浏览 4 评论 0原文

考虑以下 python 代码:

import gtk

class MainWindow():
    def __init__(self):
        self.window = gtk.Window()
        self.window.show()

if __name__ == "__main__":
    main = MainWindow()
    gtk.main()

我需要捕获此 gtk.Window() 内任何位置的点击。 我还没有找到任何合适的事件(我也尝试过 button-press-event,但它不起作用),我错过了什么?

谢谢你!

consider the following python code:

import gtk

class MainWindow():
    def __init__(self):
        self.window = gtk.Window()
        self.window.show()

if __name__ == "__main__":
    main = MainWindow()
    gtk.main()

I'd need to catch clicks anywhere inside this gtk.Window().
I haven't found any suitable event (I also tried button-press-event, but it doesn't work), what am I missing?

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

め可乐爱微笑 2024-09-13 10:59:59

您可以将 gtk.EventBox 打包到窗口中。一般来说,每当您在捕获事件时遇到问题时,请检查 gtk.EventBox 是否可以解决这些问题。

import gtk

class MainWindow():
    def __init__(self):
        self.window = gtk.Window()
        self.box = gtk.EventBox ()
        self.window.add (self.box)
        self.box.add (gtk.Label ('some text'))
        self.window.show_all()

        import sys
        self.box.connect ('button-press-event',
                          lambda widget, event:
                              sys.stdout.write ('%s // %s\n' % (widget, event)))

if __name__ == "__main__":
    main = MainWindow()
    gtk.main()

但请注意,如果小部件自行处理事件,则小部件层次结构向上的事件传播将停止。例如,gtk.Button 的父级不会收到来自它的点击事件。

You can pack a gtk.EventBox into the window. In general, whenever you have troubles catching events, check if gtk.EventBox solves them.

import gtk

class MainWindow():
    def __init__(self):
        self.window = gtk.Window()
        self.box = gtk.EventBox ()
        self.window.add (self.box)
        self.box.add (gtk.Label ('some text'))
        self.window.show_all()

        import sys
        self.box.connect ('button-press-event',
                          lambda widget, event:
                              sys.stdout.write ('%s // %s\n' % (widget, event)))

if __name__ == "__main__":
    main = MainWindow()
    gtk.main()

Note, however, that event propagation upwards the widget hierarchy will stop if a widget handles event itself. For instance, a parent of gtk.Button won't receive click events from it.

失眠症患者 2024-09-13 10:59:59

所以我在窗口中有这个绘图区域。单击后,我得到回调

  self.drawingarea = gtk.DrawingArea()
  self.drawingarea.connect ('button-press-event',self.callback)
  self.drawingarea.set_events(gtk.gdk.EXPOSURE_MASK 
                            | gtk.gdk.LEAVE_NOTIFY_MASK 
                            | gtk.gdk.BUTTON_PRESS_MASK 
                            | gtk.gdk.POINTER_MOTION_MASK 
                            | gtk.gdk.POINTER_MOTION_HINT_MASK )
  self.window.add(self.drawingarea)

过滤左按钮或右按钮:

  def callback(self, widget, event):
    print "clicking... left or right"
    if event.button == 1:
      print 'OK - clicked left '
      #os.system("""wmctrl -s 0""")
    return True

So i have this DrawingArea in Window. And on click i get the callback

  self.drawingarea = gtk.DrawingArea()
  self.drawingarea.connect ('button-press-event',self.callback)
  self.drawingarea.set_events(gtk.gdk.EXPOSURE_MASK 
                            | gtk.gdk.LEAVE_NOTIFY_MASK 
                            | gtk.gdk.BUTTON_PRESS_MASK 
                            | gtk.gdk.POINTER_MOTION_MASK 
                            | gtk.gdk.POINTER_MOTION_HINT_MASK )
  self.window.add(self.drawingarea)

Filter the left or right button:

  def callback(self, widget, event):
    print "clicking... left or right"
    if event.button == 1:
      print 'OK - clicked left '
      #os.system("""wmctrl -s 0""")
    return True
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文