PyGTK - Classe EventBox
Certains widgets de la trousse d'outils PyGTK n'ont pas leur propre fenêtre. Ces widgets sans fenêtre ne peuvent pas recevoir de signaux d'événements. De tels widgets, par exemple une étiquette, s'ils sont placés dans une boîte à événements, peuvent recevoir des signaux.
EventBox est un conteneur invisible qui fournit une fenêtre aux widgets sans fenêtre. Il a un constructeur simple sans aucun argument -
gtk.EventBox()
Exemple
Dans l'exemple suivant, deux widgets de gtk.EventBox sont placés dans la fenêtre de niveau supérieur. À l'intérieur de chaque eventbox, une étiquette est ajoutée. La boîte à événements est maintenant connectée à une fonction de rappel pour traiter l'événement button_press_event dessus. Comme la boîte à événements elle-même est invisible, l'événement se produit effectivement sur l'étiquette incorporée. Ainsi, au fur et à mesure que nous cliquons sur une étiquette, la fonction de rappel correspondante est appelée.
Observez le code -
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()
Le code ci-dessus génère la sortie suivante -
Lorsque l'étiquette 1 est cliquée sur la console, le message «étiquette 1 cliquée» est imprimé. De même, lorsque l'on clique sur l'étiquette 2, le message "étiquette cliqué 2" est imprimé.