我的程序的一部分要求用户提供他们的名字和班级(就像在高中课堂上)。在第一个文本输入我想程序只接受一个名称说不超过10个字符,但更重要的是只接受字母。对于第二个文本输入,用户必须输入他们的类-程序应该期望以下之一:5A1,5A2,5B1,5B2,5C1,5C2。。。6C1、6C2。在
如何进行这些验证?在
class Enter_Name_Window(tk.Toplevel):
'''A simple instruction window'''
def __init__(self, parent):
tk.Toplevel.__init__(self, parent)
self.text = tk.Label(self, width=40, height=2, text= "Please enter your name and class." )
self.text.pack(side="top", fill="both", expand=True)
name_var = StringVar()
def validate_enter_0():
self.Enter_0.config(state=(NORMAL if name_var.get() else DISABLED))
print("validate enter worked")
name_var.trace('w', lambda name, index, mode: validate_enter_0)
enter_name = Entry(self, textvariable=name_var)
enter_name.pack()
enter_name.focus_set()
def callback():
self.display_name = tk.Label(self, width=40, height=2, text = "Now please enter your tutor group.")
self.display_name.pack(side="top", fill="both", expand=True)
tutor_var = StringVar()
def validate_enter_2():
self.Enter_0_2.config(state=(NORMAL if tutor_var.get() else DISABLED))
print("validate enter worked")
tutor_var.trace('w', lambda name, index, mode: validate_enter_0_2)
tutor = Entry(self, textvariable=tutor_var)
tutor.pack()
tutor.focus_set()
self.Enter_0.config(state="disabled")
self.Enter_0_2 = Button(self, text="Enter", width=10, command=self.destroy)
self.Enter_0_2.pack()
self.Enter_0 = Button(self, text="Enter", width=10, command=callback)
self.Enter_0.pack()
条目小部件具有内置的验证功能,比变量跟踪更有效。请参见此答案以获取示例:
https://stackoverflow.com/a/4140988/7432
基本概念是,每当修改小部件时,都要指定回调。验证功能可以向回调发送各种有用的信息,例如正在插入(或删除)的字符、插入或删除之前的值、之后的值等。您可以使用这些信息来决定是否允许修改如果回调返回False,则输入将被拒绝。在
您也可以在此回调中执行其他操作,例如启用或禁用按钮。在
与跟踪文本变量相比,这样做的好处很简单,内置验证为您提供了很多关于做出决策的信息,并且发生在之前,而不是之后。在
为了你的第一次检查
第二次
^{pr2}$或者你可以做一些更复杂的事情:
这表示了一个关于有效类
cls
是什么的更一般的规则。在相关问题 更多 >
编程相关推荐