gpt4 book ai didi

python - 调用 tkinter.messagebox.showwarning() 后未调用条目验证命令

转载 作者:行者123 更新时间:2023-12-05 09:34:38 25 4
gpt4 key购买 nike

如果用户没有在 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() 方法。预期的行为是无论消息框是否已显示,都会为任何击键调用它。

可能是什么问题?

最佳答案

我猜这是因为您将 validate 设置为“all”。 “所有”包括对焦点的验证。当对话框弹出时,条目失去焦点。这会导致 tkinter 在验证过程中尝试进行另一轮验证。这可能会触发验证被关闭,因为您可能会进入一个不可避免的循环。

您需要想出一种方法在不失去对输入小部件的关注的情况下提醒用户,或者您需要在关闭对话框后恢复验证功能。

关于python - 调用 tkinter.messagebox.showwarning() 后未调用条目验证命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66447898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com