Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在tkinter gui的文本框输入中添加限制?_Python_User Interface_Tkinter_Textbox - Fatal编程技术网

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

Python 如何在tkinter gui的文本框输入中添加限制?,python,user-interface,tkinter,textbox,Python,User Interface,Tkinter,Textbox,我试图在一个输入小部件上增加限制,比如只允许输入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 (sh

我试图在一个输入小部件上增加限制,比如只允许输入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位数字

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_write() 函数,它可能会更改StringVar,也可能不会更改StringVar,而这种更改是
反映在条目显示的内容中

您可以向
条目
小部件添加验证。这里有一点,这是如何在这种情况下应用的

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()
将tkinter作为tk导入
从tkinter导入ttk
从tkinter导入消息框
def限制(文本):
“”“确定inp字符串是否为有效整数(或空)且不再是
比最大数字长。
"""
最大位数=11
尝试:
int(text)#有效整数?
除值错误外:
valid=(text='')#无效,除非它只是空的。
其他:

valid=(len(text)这允许输入非digts-因此它最多是不完整的。此外,OP的问题已作为副本关闭,因此他们无法接受答案。