import tkinter as tk
def only_numbers(char): # validates each character as it is entered in the entry
if char.isdigit():
return True
else:
root.bell()
return False
def _get_only_in_range():
num = int(entry._get()) # uses the private copy of the original entry.get
if 0 <= num < 200:
return num
else:
raise ValueError(f'value {num} must be between 0 and 200')
if __name__ == "__main__":
root = tk.Tk()
validation = root.register(only_numbers)
entry = tk.Entry(root, validate="key", validatecommand=(validation, '%S'))
entry._get = entry.get # make private copy of original get
entry.get = _get_only_in_range # calling entry.get now calls _get_only_in_range to validate the value
entry.pack()
tk.Button(root, text='get value', command=lambda: print(entry.get())).pack() # here get points to _get_only_in_range
root.mainloop()
tkinter Entry validation
允许验证在Entry
字段中键入的字符。 我不知道内置的验证过程是否允许验证整个输入值是否在给定范围内;但是,您可以使用通用的if-else
测试:在以下示例中,将验证条目中每个输入字符的值是否为数字。然后,在检索值
entry.get
时,检查该值以确定其在所需范围内,并在控制台中打印;如果不是,则引发ValueError
行
entry._get, entry.get = entry.get, _get_only_in_range
生成entry.get
的私有副本,然后monkey对其进行修补以注入所需的行为 更好的方法可能是编写一个类来封装特定于条目的行为您可以通过.get()方法获取值,然后编写if语句生成错误,或者在超出限制时通过.set()方法重置值
相关问题 更多 >
编程相关推荐