有边界的Tkinter入口

2024-05-15 02:50:42 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正在开发一个TkinterGUI。在这个GUI中,我想包括一个Entry字段,用户只能在其中输入两个边界之间的数字(例如,一个介于0.0和200.0之间的数字)。我已经研究了validatecommand选项,但这仍然不能为我提供解决方案。有人能帮我创建一个有边界的Tkinter{}吗

先谢谢你


Tags: 用户tkinter选项gui数字解决方案边界entry
2条回答

tkinter Entry validation允许验证在Entry字段中键入的字符。 我不知道内置的验证过程是否允许验证整个输入值是否在给定范围内;但是,您可以使用通用的if-else测试:

在以下示例中,将验证条目中每个输入字符的值是否为数字。然后,在检索值entry.get时,检查该值以确定其在所需范围内,并在控制台中打印;如果不是,则引发ValueError

entry._get, entry.get = entry.get, _get_only_in_range生成entry.get的私有副本,然后monkey对其进行修补以注入所需的行为 更好的方法可能是编写一个类来封装特定于条目的行为

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()

您可以通过.get()方法获取值,然后编写if语句生成错误,或者在超出限制时通过.set()方法重置值

相关问题 更多 >

    热门问题