PyGTK - EventBox क्लास

PyGTK टूल किट में कुछ विजेट्स की अपनी विंडो नहीं है। इस तरह के विंडोलेस विजेट्स को इवेंट सिग्नल नहीं मिल सकते हैं। इस तरह के विगेट्स, उदाहरण के लिए एक लेबल, अगर एक इवेंटबॉक्स के अंदर रखा जाए तो सिग्नल प्राप्त हो सकते हैं।

EventBox एक अदृश्य कंटेनर है जो विंडो को विंडो रहित विजेट प्रदान करता है। बिना किसी तर्क के इसका एक सरल निर्माणकर्ता है -

gtk.EventBox()

उदाहरण

निम्नलिखित उदाहरण में, gtk.EventBox के दो विजेट टॉपवेल विंडो में रखे गए हैं। प्रत्येक ईवेंटबॉक्स के अंदर, एक लेबल जोड़ा जाता है। इवेंटबॉक्स अब उस पर button_press_event को संसाधित करने के लिए कॉलबैक फ़ंक्शन से जुड़ा है। जैसा कि ईवेंटबॉक्स स्वयं अदृश्य है, प्रभावी रूप से ईवेंट एम्बेडेड लेबल पर होता है। इसलिए, जब और जब हम किसी लेबल पर क्लिक करते हैं, तो संबंधित कॉलबैक फ़ंक्शन को लागू किया जाता है।

कोड का निरीक्षण करें -

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

उपरोक्त कोड निम्नलिखित आउटपुट उत्पन्न करता है -

जब लेबल 1 कंसोल पर क्लिक किया जाता है, तो संदेश "क्लिक किया गया लेबल 1" प्रिंट हो जाता है। इसी तरह, जब लेबल 2 पर क्लिक किया जाता है, तो "क्लिक किया गया लेबल 2" संदेश मुद्रित होता है।