Поймать клик в любом месте внутри окна gtk.Window - PullRequest
3 голосов
/ 19 июня 2010

рассмотрим следующий код 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 ]

4 голосов
/ 20 июня 2010

Вы можете упаковать 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 не будет получать от него события клика.

0 голосов
/ 26 сентября 2013

Итак, у меня есть это 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
...