我如何让Tkinter程序实时扫描文本框以获取输入?

时间:2019-02-08 01:52:15

标签: python tkinter

最终,我想用文本框制作一个小程序,您必须在其中输入Pi的前50个左右数字。如果用户键入正确的字符,我想要的是什么都不会发生,但是如果用户输入错误的字符,我希望某些东西闪烁红色。例如,如果用户键入“ 3.1”,则仅显示在文本框中的文本什么都不会发生,但是如果他们键入错误的数字(如“ 3.15”),我希望某些内容闪烁红色。

from tkinter import *

def input(event):
    inp = (ent.get('1.0', END))
    if inp == '3':
        print(inp)
    else:
        print(('--') + (inp))

root = Tk()
root.title('pi, okay')
root.geometry('425x50')

ent = Text(root, width = 50, height = 1)
ent.bind('<KeyRelease>', input)
ent.pack()



mainloop()

我认为应该发生的情况是,如果用户输入“ 3”,则控制台将打印“ 3”;如果是,则控制台将显示“-(无论用户键入什么)”。不是3。但是实际上发生的是该程序无论如何都将打印“-(输入)”。

1 个答案:

答案 0 :(得分:0)

如果只需要一行输入,则可以使用类似这样的东西:

var = StringVar()
ent = Entry(root, width=50, textvariable=var)
def check_value(var, ent, *args):
    pi = "3.1415"
    if not pi.startswith(var.get()):
        print("wrong input")
        ent.config(fg="red")
    else:
        ent.config(fg="black")

var.trace('w', lambda *args: check_value(var, ent, *args))
ent.pack()

在这里,每次用户在Entry小部件中键入任何内容时,var.trace()都会调用函数check_value。您可以在此处添加逻辑以验证输入值,并根据验证结果更改UI(或打印日志)。