PyGTK - Classe EventBox

Alcuni widget nel toolkit PyGTK non hanno una propria finestra. Tali widget senza finestra non possono ricevere segnali di eventi. Tali widget, ad esempio un'etichetta, se inseriti in un eventbox possono ricevere segnali.

EventBox è un contenitore invisibile che fornisce finestre a widget senza finestre. Ha un semplice costruttore senza alcun argomento -

gtk.EventBox()

Esempio

Nell'esempio seguente, due widget di gtk.EventBox sono posizionati nella finestra di primo livello. All'interno di ogni eventbox, viene aggiunta un'etichetta. L'eventbox è ora connesso a una funzione di callback per elaborare button_press_event su di esso. Poiché la casella degli eventi stessa è invisibile, effettivamente l'evento si verifica sull'etichetta incorporata. Quindi, come e quando facciamo clic su qualsiasi etichetta, viene richiamata la funzione di callback corrispondente.

Rispetta il codice -

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()

Il codice precedente genera il seguente output:

Quando si fa clic sull'etichetta 1 sulla console, viene stampato il messaggio "etichetta 1 selezionata". Allo stesso modo, quando si fa clic sull'etichetta 2, viene stampato il messaggio "etichetta 2 cliccata".