我一直在网上冲浪,寻找不使用“课程”功能但未获得成功的答案。我得到的是3个输入框,例如,我正在尝试使用this function(由DorinPopescu提交),但我没有获取并设置特定的StringVar,我想将相关的StringVar传递给功能,并传递条目的大小。
我试过这个:
def limitSize(entry, max):
max = int(max)
value = entry.get()
if len(value) > max: entry.set(value[:max])
UsernameVar= StringVar()
UsernameVar.trace('w', lambda: limitSize(UsernameVar, 10))
PasswordVar= StringVar()
PasswordVar.trace('w', lambda: limitSize(PasswordVar, 4))
AgeVar= StringVar()
AgeVar.trace('w', lambda: limitSize(AgeVar, 2))
Username=Entry(root, textvariable=UsernameVar).pack()
Password=Entry(root, textvariable=PasswordVar).pack()
Age=Entry(root, textvariable=AgeVar).pack()
答案 0 :(得分:1)
条目小部件具有专门针对此类事物的选项。您可以设置将验证输入的回调,并拒绝任何违反约束的输入。
这是一个将用户名限制为10个字符,密码限制为4的工作示例:
import Tkinter as tk
def limitSize(new_value, max_len):
return True if len(new_value) <= int(max_len) else False
root = tk.Tk()
_limitSize = root.register(limitSize)
username = tk.Entry(root, validate="key", validatecommand=(_limitSize, '%P', 10))
password = tk.Entry(root, validate="key", validatecommand=(_limitSize, '%P', 4))
username.pack(fill="x")
password.pack(fill="x")
root.mainloop()
validate
选项指定验证何时完成。 "key"
导致验证在每个按键上完成。其他值相对不言自明:&#34;无&#34;,&#34;焦点&#34;,&#34;焦点&#34;,&#34;焦点&#34;或&#34;所有& #34;
validatecommand
选项指定一个元组,该元组需要一个已向底层tcl解释器注册的命令,以及零个或多个参数。 Tkinter有许多特殊参数可以替换为可用于进行验证的信息。在上面的例子中,&#34;%P&#34;如果允许编辑,则替换为条目小部件的值。您还可以访问编辑类型(插入或删除),仅插入新文本以及其他一些内容。
在这种情况下,如果允许编辑,我们只关心值。要求回调始终返回True
或False
。如果返回True
,则允许修改,如果False
,则不允许修改。
要知道的一件重要事情:传递给函数的值将转换为字符串。这就是为什么在上面的示例中max_len
在进行比较之前被转换为int。
有关更深入的示例,请参阅此答案:https://stackoverflow.com/a/4140988/7432
答案 1 :(得分:0)
感谢j_4321,请注意在StringVar跟踪中调用limitSize函数时已添加到lambda的'* args'。
def limitSize(entry, max):
max = int(max)
value = entry.get()
if len(value) > max: entry.set(value[:max])
UsernameVar= StringVar()
UsernameVar.trace('w', lambda *args: limitSize(UsernameVar, 10))
PasswordVar= StringVar()
PasswordVar.trace('w', lambda *args: limitSize(PasswordVar, 4))
AgeVar= StringVar()
AgeVar.trace('w', lambda *args: limitSize(AgeVar, 2))
Username=Entry(root, textvariable=UsernameVar).pack()
Password=Entry(root, textvariable=PasswordVar).pack()
Age=Entry(root, textvariable=AgeVar).pack()