คำตอบที่ถูกต้องคือใช้ validatecommandคุณลักษณะของวิดเจ็ต น่าเสียดายที่คุณลักษณะนี้ไม่ได้รับการบันทึกไว้อย่างรุนแรงในโลกของ Tkinter แม้ว่าจะมีการบันทึกไว้ค่อนข้างเพียงพอในโลก Tk แม้ว่าจะไม่ได้รับการจัดทำเป็นเอกสารอย่างดี แต่ก็มีทุกสิ่งที่คุณต้องทำการตรวจสอบความถูกต้องโดยไม่ต้องใช้การผูกหรือการติดตามตัวแปรหรือแก้ไขวิดเจ็ตจากภายในขั้นตอนการตรวจสอบความถูกต้อง
เคล็ดลับคือการรู้ว่าคุณสามารถมี Tkinter pass ในค่าพิเศษสำหรับคำสั่ง validate ของคุณได้ ค่าเหล่านี้ให้ข้อมูลทั้งหมดที่คุณจำเป็นต้องทราบเพื่อตัดสินใจว่าข้อมูลนั้นถูกต้องหรือไม่: ค่าก่อนการแก้ไขค่าหลังการแก้ไขหากการแก้ไขถูกต้องและข้อมูลอื่น ๆ อีกหลายบิต ในการใช้สิ่งเหล่านี้คุณต้องทำวูดูเล็กน้อยเพื่อให้ข้อมูลนี้ส่งผ่านไปยังคำสั่ง validate ของคุณ
หมายเหตุ: สิ่งสำคัญคือคำสั่ง validation จะส่งคืน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