PyGTK - classe EventBox
Alguns widgets no kit de ferramentas PyGTK não têm sua própria janela. Esses widgets sem janelas não podem receber sinais de eventos. Esses widgets, por exemplo um rótulo, se colocados dentro de uma caixa de eventos podem receber sinais.
EventBox é um contêiner invisível que fornece janela para widgets sem janelas. Tem um construtor simples sem nenhum argumento -
gtk.EventBox()
Exemplo
No exemplo a seguir, dois widgets do gtk.EventBox são colocados na janela de nível superior. Dentro de cada caixa de eventos, um rótulo é adicionado. A caixa de eventos agora está conectada a uma função de retorno de chamada para processar o button_press_event nela. Como a caixa de eventos em si é invisível, efetivamente o evento ocorre no rótulo incorporado. Portanto, à medida que clicamos em qualquer rótulo, a função de retorno de chamada correspondente é invocada.
Observe o código -
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("EventBox demo")
self.set_size_request(200,100)
self.set_position(gtk.WIN_POS_CENTER)
fixed = gtk.Fixed()
event1 = gtk.EventBox()
label1 = gtk.Label("Label 1")
event1.add(label1)
fixed.put(event1, 80,20)
event1.connect("button_press_event",self.hello1)
event2 = gtk.EventBox()
label2 = gtk.Label("Label 2")
event2.add(label2)
event2.connect("button_press_event",self.hello2)
fixed.put(event2, 80,70)
self.add(fixed)
self.connect("destroy", gtk.main_quit)
self.show_all()
def hello1(self, widget, event):
print "clicked label 1"
def hello2(self, widget, event):
print "clicked label 2"
PyApp()
gtk.main()
O código acima gera a seguinte saída -
Quando o rótulo 1 é clicado no console, a mensagem "rótulo clicado 1" é impressa. Da mesma forma, quando Label 2 é clicado, a mensagem "clicked label 2" é impressa.