सही उत्तर है, validatecommand
विजेट की विशेषता का उपयोग करें । दुर्भाग्य से यह सुविधा टिक्कर दुनिया में गंभीर रूप से रेखांकित की जाती है, हालाँकि यह Tk दुनिया में पर्याप्त रूप से प्रलेखित है। भले ही यह अच्छी तरह से प्रलेखित नहीं है, लेकिन इसमें वह सब कुछ है जो आपको बाइंडिंग या ट्रेसिंग चर का सहारा लिए बिना या सत्यापन प्रक्रिया के भीतर विजेट को संशोधित किए बिना सत्यापन करने की आवश्यकता है।
चाल यह जानने के लिए है कि आप अपने मान्य कमांड के लिए विशेष मूल्यों में टिंकर पास कर सकते हैं। ये मान आपको वे सभी जानकारी देते हैं जो आपको यह जानने के लिए आवश्यक है कि डेटा मान्य है या नहीं: संपादित करने से पहले का मूल्य, संपादन के बाद का मूल्य यदि संपादन मान्य है, और जानकारी के कई अन्य बिट्स। इनका उपयोग करने के लिए, हालांकि, आपको इस जानकारी को अपने मान्य कमांड को पास करने के लिए थोड़ा वूडू करने की आवश्यकता है।
नोट: यह महत्वपूर्ण है कि सत्यापन आदेश True
या तो वापस आए False
। विजेट के लिए सत्यापन बंद करने का कारण कुछ और होगा।
यहाँ एक उदाहरण है जो केवल लोअरकेस की अनुमति देता है (और उन सभी फंकी वैल्यू को प्रिंट करता है):
import tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
vcmd = (self.register(self.onValidate),
'%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
self.entry = tk.Entry(self, validate="key", validatecommand=vcmd)
self.text = tk.Text(self, height=10, width=40)
self.entry.pack(side="top", fill="x")
self.text.pack(side="bottom", fill="both", expand=True)
def onValidate(self, d, i, P, s, S, v, V, W):
self.text.delete("1.0", "end")
self.text.insert("end","OnValidate:\n")
self.text.insert("end","d='%s'\n" % d)
self.text.insert("end","i='%s'\n" % i)
self.text.insert("end","P='%s'\n" % P)
self.text.insert("end","s='%s'\n" % s)
self.text.insert("end","S='%s'\n" % S)
self.text.insert("end","v='%s'\n" % v)
self.text.insert("end","V='%s'\n" % V)
self.text.insert("end","W='%s'\n" % W)
if S == S.lower():
return True
else:
self.bell()
return False
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
जब आप register
विधि को कॉल करते हैं , तो हुड के नीचे क्या होता है, इसके बारे में अधिक जानकारी के लिए , इनपुट सत्यापन tkinter देखें