लगता है जैसे आपके सभी विजेट एक ईवेंट हैंडलर साझा कर रहे हैं। जॉन डब्ल्यू शिपमैन - एनएम टेक द्वारा Tkinter 8.4 Reference से यह अंश मदद कर सकता है।
30.7. The extra arguments trick
कभी-कभी आप घटना के अलावा कोई हैंडलर के लिए अन्य तर्क पारित करने के लिए करना चाहते हैं।
यहां एक उदाहरण है। मान लीजिए कि आपके एप्लिकेशन में दस चेकबूटन की एक सरणी है जिसका विजेट एक सूची self.cbList
में संग्रहीत किया गया है, द्वारा range(10)
में चेकबटन संख्या द्वारा अनुक्रमित किया गया है।
आगे मान लीजिए कि आप के सभी दस इन checkbuttons में एक हैंडलर <Button-1>
घटनाओं के लिए .__cbHandler
नामित लिखना चाहते हैं। हैंडलर वास्तविक Checkbutton
विजेट कि यह Event
उद्देश्य यह है कि में पारित हो जाता है की .widget
विशेषता की चर्चा करते हुए से शुरू हो रहा प्राप्त कर सकते हैं, लेकिन कैसे यह self.cbList
में है कि checkbutton के सूचकांक पता लगाना है?
यह इस तरह checkbutton संख्या के लिए एक अतिरिक्त तर्क, कुछ के साथ हमारे हैंडलर लिखने के लिए अच्छा होगा:
def __cbHandler (self, event, cbNumber):
लेकिन ईवेंट हैंडलर्स केवल एक तर्क, घटना पारित कर रहे हैं। तो हम तर्कों की संख्या में मेल नहीं खाते के कारण उपरोक्त फ़ंक्शन का उपयोग नहीं कर सकते हैं।
सौभाग्य से, की पाइथन की क्षमता फ़ंक्शन तर्कों के लिए डिफ़ॉल्ट मान प्रदान करती है, तर्क हमें एक रास्ता देता है।
def __createWidgets (self):
?
self.cbList = [] # Create the checkbutton list
for i in range(10):
cb = Checkbutton (self, ?)
self.cbList.append (cb)
cb.grid(row=1, column=i)
def handler (event, self=self, i=i): # [1]
return self.__cbHandler (event, i)
cb.bind ("<Button-1>", handler)
?
def __cbHandler (self, event, cbNumber):
?
#
[1] ये लाइनें एक नया कार्य handler
कि तीन तर्क की उम्मीद को परिभाषित: इस कोड में एक नज़र डालें।पहला तर्क Event
वस्तु सभी घटना संचालकों को पारित कर दिया है, और दूसरे और तीसरे तर्क उनके डिफ़ॉल्ट मूल्यों पर निर्धारित किया जाएगा? अतिरिक्त तर्क हम करने की जरूरत है इसे पारित।
इस तकनीक को तक बढ़ाया जा सकता है,हैंडलर के लिए तर्कों की संख्या को आपूर्ति करें।