python - 如何实时验证文本框输入
问题描述
它是一个应用程序,它询问数学问题,用户在文本框中输入整数作为答案,并通过一个按钮submitbtn
验证其正确或错误。我将一个键盘键绑定f
到在按下 button 时运行的功能submitbtn
,它工作正常,但是在用户提交之前,该键f
被添加到文本框中,并将其作为错误答案提供。
文本框
text_Input = StringVar
txtbox = Entry(font=('arial',20, BOLD), textvariable=text_Input)
txtbox.grid(columnspan = 2, row = 3, pady = 20)
txtbox.focus_set()
提交按钮
submitbtn = Button(text="Submit", padx=10, pady=10, command=lambda:submit(txtbox.get(), y))
提交功能
def submit(z, y):
global correct_answer, wrong_answer, submitbtn
y=str(y)
if z==y:
correct_answer+=1
lbl2.configure(text=correct_answer)
else:
wrong_answer+=1
lbl4.configure(text=wrong_answer)
submitbtn.config(state="disabled")
捆绑
game.bind('f', lambda event: submit(txtbox.get(), y))
#"game" is the name of Tk()
#submit is the function linked to submitbtn
#This works well if I bind it to <Return> (Enter Key)
实际输出:
5+8
用户输入:13
按“f”提交答案
已处理答案:13f
有没有办法实时处理文本框输入以确保输入的每个字符都是整数?如果用户输入除 0-9 以外的任何内容,我希望它在文本框中不记任何内容。
此外,我在按下一次后禁用
submitbtn
它,但反复按下 f 会继续增加correct_answer
变量。有没有办法将键绑定到submitbtn
依次调用函数submit
的键,而不是直接将键链接f
到submit
函数?
解决方案
对于您的第一个问题,有两种方法可以做到。要么你使用你的trace
方法StringVar
,要么使用validcommand
你的条目。您可以在此处和此处阅读有关如何使用这两种方法的详细信息
import tkinter as tk
root = tk.Tk()
# Use trace method on your StringVar
text_Input = tk.StringVar() # note that it is StringVar() with ()
txtbox = tk.Entry(font="Arial 20 bold",textvariable=text_Input)
txtbox.grid(columnspan = 2, row = 3, pady = 20)
def trace_method(*args):
if text_Input.get().isdigit():
pass
else:
text_Input.set(text_Input.get()[:-1])
text_Input.trace("w",trace_method)
# Use validatecommand attribute of entry widget
def onValidate(S):
if S.isdigit():
return True
else:
return False
vcmd = (root.register(onValidate),"%S")
txtbox2 = tk.Entry(font="Arial 20 bold",validate="key",validatecommand=vcmd)
txtbox2.grid(columnspan = 2, row = 4, pady = 20)
root.mainloop()
对于您的第二个问题,我无法完全理解您要实现的目标,但如果问题出在与键 f 的绑定上,我想您可以简单地调用game.unbind('f')
您的submit
函数。
推荐阅读
- python-3.x - 如何在 plotly dash 中制作 webhook?
- python - 当我们将竞争表作为 Django 中其他表的列之一的外键时,哪一列将成为外键?
- python - Python 迭代器类 - 嵌套迭代
- python - 我正在尝试使用 Pygame 在 python 中下雨,但是当代码运行时所有的水滴都会冻结
- javascript - 如何在当前视口中显示纯文本?
- c# - iTextSharp 5.5.13.1 从 PDF 中提取文本时没有可用于编码 10000 的数据
- php - 上传文件超过 Wordpress / Apache / Linux AMI 2
- c++ - 这两个表达式是否都一样:“CTest cTest(t);” “CTest cTest=t;” 在 C++ 中?只是效率不同?
- mysql - 从网站连接到 MySQL 数据库会出现“ETIMEDOUT”错误?
- javascript - 使用给定日期检查当前日期