【发布时间】:2021-03-02 22:12:34
【问题描述】:
如果用户没有在Entry 中输入整数,我想显示一个警告,这是一个最小的示例:
import tkinter as tk
from tkinter import messagebox
class MainWindow(tk.Tk):
""" The main window
"""
def __init__(self):
tk.Tk.__init__(self)
self.configure_window()
def configure_window(self):
""" Configure the main window
"""
self.geometry("600x400")
self.title("Testing entry validate command")
self.bind_all('<Control-w>', lambda e: self.destroy())
var1 = tk.StringVar(value="0")
vcmd = (self.register(self.validate_input))
entry1 = tk.Entry(
self,
textvariable=var1,
validate='all',
validatecommand=(vcmd, '%P'))
entry1.place(relx=0.5, rely=0.5, anchor=tk.CENTER)
def validate_input(self, txt):
""" Validate that the input only contains digits
"""
print(txt)
if str.isdigit(txt) or txt == "":
return True
messagebox.showwarning(
"Alert", "Please enter a positive integer")
return False
def main():
window = MainWindow()
window.mainloop()
main()
问题是在第一次显示警告消息后没有调用validate_input() 方法。例如,如果用户在条目中输入“0”、“1”、“r”(三个按键),则每次按键都会调用validate_input(),而对于最后一个按键(字母“r”)显示警告消息框。接下来,如果用户继续在条目中键入(在警告消息框中按“确定”后),则不会再为以下击键调用 validate_input() 方法。预期的行为是,无论消息框是否已显示,任何按键都会调用它。
可能是什么问题?
【问题讨论】:
-
你知道你可以用
str.isdigit(txt)代替txt.isdigit() -
作为用户,当我输入错误的字符时出现弹出窗口,我会感到非常沮丧。
-
@BryanOakley 这可能是真的,但是一旦用户知道消息框出现后,第一次之后消息框就不会经常显示了