如何在tkinter gui的文本框输入中添加限制?

2024-10-05 10:22:08 发布

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

我试图在一个输入小部件上增加限制,比如只允许输入11位数字。我试过这个:

import tkinter as tk 
from tkinter import ttk 
from tkinter import messagebox

root=tk.Tk()


string=tk.StringVar()
def limit(string):
    if len(string.get())>11:
        messagebox.showinfo('invalid input (should be 11 digits')


label=tk.Label(root,text="Phone Number:",font=20,bg="#33BEFF")
label.pack()
phno=ttk.Entry(root,textvariable=string,text="",command=limit)
phno.pack()

root.mainloop()

我希望一个条目只能输入11位数字。你知道吗


Tags: textfromimportstring部件tkinter数字root
2条回答
import tkinter as tk
from tkinter import *
root=tk.Tk()


string = tk.StringVar()

max_len = 11
def on_write(*args):
    s = string.get()
    if len(s) > max_len:
        string.set(s[:max_len])

string.trace_variable("w", on_write)

label=tk.Label(root,text="Phone Number:",font=20,bg="#33BEFF")
label.pack()


phno = tk.Entry(root, textvariable=string)
phno.pack()

root.mainloop()

告诉StringVar每次调用函数的值为 改变。因此,每次用户编辑条目中的数据时 条目更改StringVar的数据,它调用on\u write() 函数,该函数可以更改或不更改StringVar,并且该更改是 反映在条目显示的内容中

您可以向Entry小部件添加验证。这里有一点documentation,下面是如何在这种情况下应用它。你知道吗

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox


def limit(text):
    """ Determine if inp string is a valid integer (or empty) and is no more
        than MAX_DIGITS long.
    """
    MAX_DIGITS = 11

    try:
        int(text)  # Valid integer?
    except ValueError:
        valid = (text == '')  # Invalid unless it's just empty.
    else:
        valid = (len(text) <= MAX_DIGITS)   # OK unless it's too long.

    if not valid:
        messagebox.showinfo('Entry error',
                            'Invalid input (should be {} digits)'.format(MAX_DIGITS),
                            icon=messagebox.WARNING)
    return valid


root = tk.Tk()
root.geometry('200x100')  # Initial size of root window.

label = tk.Label(root, text="Phone Number:", font=20, bg="#33BEFF")
label.pack()

reg = root.register(limit)  # Register Entry validation function.
string = tk.StringVar()
phno = ttk.Entry(root, textvariable=string, text="",
                 validate='key', validatecommand=(reg, '%P'))
phno.pack()
phno.focus_set()  # Set initial input focus to this widget.

root.mainloop()

相关问题 更多 >

    热门问题