PyGTK - EventBox Sınıfı

PyGTK araç kitindeki bazı widget'ların kendi penceresi yoktur. Bu tür penceresiz aletler olay sinyallerini alamaz. Bu tür widget'lar, örneğin bir etiket, bir olay kutusuna yerleştirilirse sinyalleri alabilir.

EventBox, penceresiz widget'lara pencere sağlayan görünmez bir kapsayıcıdır. Herhangi bir argümansız basit bir kurucuya sahiptir -

gtk.EventBox()

Misal

Aşağıdaki örnekte, gtk.EventBox öğesinin iki widget'ı üst düzey pencereye yerleştirilmiştir. Her olay kutusunun içine bir etiket eklenir. Olay kutusu, üzerindeki button_press_event işlevini işlemek için artık bir geri çağırma işlevine bağlanmıştır. Olay kutusunun kendisi görünmez olduğundan, olay etkili bir şekilde gömülü etiket üzerinde gerçekleşir. Bu nedenle, herhangi bir etikete tıkladığımızda, ilgili geri arama işlevi çağrılır.

Kodu inceleyin -

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

Yukarıdaki kod aşağıdaki çıktıyı üretir -

Konsolda Etiket 1 tıklandığında "tıklanan etiket 1" mesajı yazdırılır. Benzer şekilde Etiket 2 tıklandığında "tıklanan etiket 2" mesajı yazdırılır.