PyGTK - सिग्नल हैंडलिंग

कंसोल मोड एप्लिकेशन के विपरीत, जिसे क्रमिक तरीके से निष्पादित किया जाता है, एक GUI- आधारित एप्लिकेशन इवेंट संचालित होता है। gtk.main()फ़ंक्शन एक अनंत लूप शुरू करता है। जीयूआई पर होने वाली घटनाओं को उचित कॉलबैक फ़ंक्शन में स्थानांतरित किया जाता है।

प्रत्येक PyGTK विजेट, जो GObject क्लास से लिया गया है, को उत्सर्जित करने के लिए डिज़ाइन किया गया है ‘signal’एक या अधिक घटनाओं के जवाब में। अपने आप पर संकेत कोई कार्रवाई नहीं करता है। इसके बजाय, यह कॉलबैक फ़ंक्शन के लिए 'कनेक्ट' है।

कुछ सिग्नल विजेट द्वारा विरासत में मिले हैं, जबकि कुछ सिग्नल विजेट विशिष्ट हैं। उदाहरण के लिए, टॉगलबटन विजेट द्वारा "टॉगल" संकेत उत्सर्जित होता है।

एक सिग्नल हैंडलर की स्थापना करके की जाती है connect() gtk.widget वर्ग की विधि।

handler_id = object.connect(name, func, func_data)
  • पहला तर्क, name, एक स्ट्रिंग है जिसमें सिग्नल का नाम है जिसे आप पकड़ना चाहते हैं।

  • दूसरा तर्क, func, कॉल बैक फंक्शन है जिसे आप तब कहते हैं जब इसे पकड़ा जाए।

  • तीसरा तर्क, func_data, वह डेटा जिसे आप इस फ़ंक्शन में पास करना चाहते हैं।

  • हैंडलर आईडी, जिसका उपयोग कॉलबैक पद्धति की विशिष्ट पहचान के लिए किया जाता है।

उदाहरण के लिए, जब एक बटन क्लिक किया जाता है, तो onClicked () फ़ंक्शन को लागू करने के लिए, निम्नलिखित सिंटैक्स का उपयोग करें -

btn.connect("clicked",onClicked,None)

OnClicked () फ़ंक्शन के रूप में परिभाषित किया गया है -

def onClicked(widget, data=None):

यदि कॉलबैक विधि एक ऑब्जेक्ट विधि है, तो यह एक अतिरिक्त तर्क के रूप में स्वयं प्राप्त करता है -

def onClicked(self, widget, data=None):

उदाहरण

निम्नलिखित उदाहरण में, gtk.Window में एक बटन जोड़ा जाता है। बटन पर क्लिक करने पर "हैलो वर्ल्ड" संदेश प्रिंट होता है।

import gtk
class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Hello World in PyGTK")
      self.set_default_size(400,300)
      self.set_position(gtk.WIN_POS_CENTER)
		
      self.label = gtk.Label("Enter name")
      self.entry = gtk.Entry()
		
      self.btn = gtk.Button("Say Hello")
      self.btn.connect("clicked",self.hello)
		
      fixed = gtk.Fixed()
      fixed.put(self.label, 100,100)
      fixed.put(self.entry, 100,125)
      fixed.put(self.btn,100,150)
		
      self.add(fixed)
      self.show_all()
		
   def hello(self,widget):
      print "hello",self.entry.get_text()
PyApp()
gtk.main()

उपरोक्त कोड को पायथन प्रॉम्प्ट से चलाएं। निम्नलिखित आउटपुट प्रदर्शित किया जाएगा -

जब बटन दबाया जाता है, तो निम्न आउटपुट कंसोल पर प्रदर्शित होता है -

Hello TutorialsPoint