在gtk.Window内的任何位置捕获一个单击

时间:2010-06-19 19:40:03

标签: python events gtk click pygtk

考虑以下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,但它不起作用),我错过了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以将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的父级不会从中接收点击事件。

答案 1 :(得分:0)

所以我在Window中有这个DrawingArea。点击即可获得回调

  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