📜  Python Tkinter – 验证条目小部件

📅  最后修改于: 2022-05-13 01:54:42.788000             🧑  作者: Mango

Python Tkinter – 验证条目小部件

Python提供了多种框架来处理 GUI 应用程序。 Tkinter 或 Tk 接口是用于构建基于 GUI 的应用程序的最广泛使用的Python接口之一。有些应用程序需要验证文本字段,以防止在提交表单之前来自用户的无效输入。 Python通过允许使用回调函数跟踪变量来允许输入验证。每当向条目小部件添加/删除输入时,都会调用此函数。一些应用程序在提交表单时验证输入,但下面的代码对键盘上的每个键进行验证。

  1. 导入 tkinter 模块
    import tkinter
  2. 导入 tkinter 子模块
    from tkinter import *
  3. 定义“回调”函数
    def callback(input):
        if input.isdigit():
            print(input)
            return True
                            
        elif input is "":
            print(input)
            return True
    
        else:
            print(input)
            return False

    解释
    回调函数检查 Entry 小部件中的输入是否有效。如果条目有效,则返回 True,否则返回 False。在此示例中,检查通过键盘输入的输入是否为数字类型。如果输入是数字类型,则回调函数返回 true。对于删除操作,回调函数返回 true,因为输入是“”。然而,对于任何非数字输入,回调函数返回 false。

  4. 创建父窗口
    root=Tk()

    语法: Tk(screenName=None, baseName=None, className='Tk', useTk=1)
    参数:在本例中,Tk 类在没有参数的情况下被实例化。
    解释
    此方法创建一个父窗口小部件,它通常是应用程序的主窗口。

  5. 创建条目小部件
    e=Entry(root)

    语法: Entry(master, **options)
    范围:

    • master:代表父窗口(这里是根)。
    • options:支持的选项有 bg、bd、command、cursor、font、exportselection、justify、relief、highlightcolor、fg、selectbackground、selectforeground、selectborderwidth、show、xscrollcommand、state、textvariable 和 width。

    返回值:返回一个字符串(.!entry) 。
    解释
    此方法用于在父小部件(根)上创建 Entry 小部件。

  6. 指定 Entry 小部件在父窗口中的位置
    e.place(x=50, y=50)

    语法: place(x, y)
    范围:

    • x: Entry 小部件相对于父小部件沿 X 轴的位置。
    • y: Entry 小部件相对于父小部件沿 Y 轴的位置。

    解释:
    此方法指定 Entry 小部件在父窗口(根)中的位置。

  7. 注册回调函数
    reg=root.register(callback)

    语法:寄存器(函数)
    范围:

    • 函数:要调用以验证 Entry 小部件中的输入的函数。

    返回值:该方法返回一个可用于函数的字符串。
    解释
    register() 方法返回一个字符串,该字符串分配给变量“reg”,用于在后期调用回调函数。

  8. 调用回调函数来验证 Entry 小部件中的输入
    e.config(validate="key", validatecommand=(reg, '%P'))

    语法: config(validate=”key”, validatecommand=(reg, '%P'))
    范围:

    • validate:此选项用于指定何时调用回调函数来验证输入。 “key”值指定每当任何击键(从键盘输入)更改小部件的内容时都会发生验证。
    • validatecommand:该选项用于指定回调函数。该函数不是直接调用的,而是传递了一个在前面步骤中注册的变量。 '%P' 被传递来表示如果允许更改,文本将具有的值。

    解释
    Validate 选项支持其他值,例如 focus、focusin、focusout、all 和 none。默认值为“none”,表示不进行验证。
    Validatecommand 选项支持其他值,例如 %d、%i、%s、%S、%v、%V 和 %W。可以为要传递给Python函数的每个参数添加百分比替换
    Entry 小部件还支持在 validatecommand 返回 False 时调用函数的 invalidcommand 选项。
    这些可以根据用户的要求使用。

  9. 运行应用程序
    root.mainloop()

    语法:mainloop()
    解释
    mainloop() 是一个无限循环,用于在窗口未关闭时运行应用程序。

用于验证 Entry 小部件的完整代码

import tkinter
from tkinter import *
  
  
def callback(input):
      
    if input.isdigit():
        print(input)
        return True
                          
    elif input is "":
        print(input)
        return True
  
    else:
        print(input)
        return False
                          
root = Tk()
  
e = Entry(root)
e.place(x = 50, y = 50)
reg = root.register(callback)
  
e.config(validate ="key", 
         validatecommand =(reg, '% P'))
  
root.mainloop()

输出:(推荐全屏查看)

解释
当我们使用键盘输入数字时,回调函数返回 true,并且该值在输入小部件中是允许的。但是,在从键盘输入字母时,回调函数会返回 false,并且不允许在条目小部件中输入该值。为了更清楚地了解回调函数的工作原理,通过键盘发送的输入会打印在控制台上。可以看出,任何非数字输入都会打印在控制台上,但不允许出现在条目小部件中。在条目小部件中也允许插入和删除数字。