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