有边界的 Tkinter 条目
A Tkinter Entry with boundaries
目前,我正在开发 Tkinter
GUI。在此 GUI 中,我想包含一个 Entry
字段,用户只能在其中输入两个边界之间的数字(例如,介于 0.0 和 200.0 之间的数字)。我查看了 validatecommand
选项,但这仍然没有为我提供解决方案。有没有人可以帮我创建一个有边界的 Tkinter
Entry
?
提前致谢。
您可以通过.get()方法获取值,然后写一个if语句产生错误,或者在超过限制时通过.set()方法重置该值。
tkinter Entry validation
允许验证在 Entry
字段中键入的字符。
我不知道 tkinter
中内置的验证过程是否允许验证整个输入值是否在给定范围内;但是,您可以使用常见的 if-else
测试:
在以下示例中,条目中输入的每个字符的值都被验证为数字。然后,在检索到值 entry.get
后, 检查该值以确定它在所需范围内 ,并打印在控制台中;如果不是,则引发 ValueError
。
行 entry._get, entry.get = entry.get, _get_only_in_range
制作了 entry.get
的私有副本,然后猴子修补它以注入所需的行为
更好的方法可能是编写一个 class 来封装特定于您的条目的行为。
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
GUI。在此 GUI 中,我想包含一个 Entry
字段,用户只能在其中输入两个边界之间的数字(例如,介于 0.0 和 200.0 之间的数字)。我查看了 validatecommand
选项,但这仍然没有为我提供解决方案。有没有人可以帮我创建一个有边界的 Tkinter
Entry
?
提前致谢。
您可以通过.get()方法获取值,然后写一个if语句产生错误,或者在超过限制时通过.set()方法重置该值。
tkinter Entry validation
允许验证在 Entry
字段中键入的字符。
我不知道 tkinter
中内置的验证过程是否允许验证整个输入值是否在给定范围内;但是,您可以使用常见的 if-else
测试:
在以下示例中,条目中输入的每个字符的值都被验证为数字。然后,在检索到值 entry.get
后, 检查该值以确定它在所需范围内 ,并打印在控制台中;如果不是,则引发 ValueError
。
行 entry._get, entry.get = entry.get, _get_only_in_range
制作了 entry.get
的私有副本,然后猴子修补它以注入所需的行为
更好的方法可能是编写一个 class 来封装特定于您的条目的行为。
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()