gpt4 book ai didi

python - Tkinter tkMessageBox 禁用 Tkinter 键绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 02:06:42 30 4
gpt4 key购买 nike

这是一个非常简单的示例:

from Tkinter import *
import tkMessageBox

def quit(event):
exit()

root = Tk()
root.bind("<Escape>", quit)
#tkMessageBox.showinfo("title", "message")
root.mainloop()

如果我完全按原样运行代码,程序将在按下 Esc 时终止。现在,如果我取消注释 tkMessageBox 行,则关闭消息框后绑定(bind)将“丢失”,即按 Esc 将不再执行任何操作。这发生在 Python 2.7 中。您能核实一下您是否也遇到这种情况吗?并告诉我您的 Python 版本。

<小时/>

这里有一种“绕过”这个问题的方法。这是一种不同的方法,但可能会有所帮助:

from Tkinter import *
import tkMessageBox

def msg_test():
tkMessageBox.showinfo("title", "message")

def quit(event):
exit()

root = Tk()
root.bind("<Escape>", quit)
btn = Button(root, text="Check", command=msg_test); btn.pack()
root.mainloop()

通过单击按钮使用tkMessageBox,不会影响键绑定(bind),即按Esc继续工作。

最佳答案

如果我理解这个问题,如果您在调用 mainloop 之前调用 tkMessageBox.showInfo() ,就会出现不良行为。如果是这样,我认为这是 Windows 上 tkinter 中的一个已知错误。

解决方案很简单:不要这样做。如果您需要在程序开始时显示对话框,请使用 after 安排它在主循环启动后显示,或在显示对话框之前调用 update

例如:

root = Tk()
root.after_idle(msg_test)
root.mainloop()
<小时/>

最初的错误是在很久以前报告的,并且 tk 错误数据库已经移动了一两次,所以我很难找到原始问题的链接。 2000/2001 年的一期提到了它:https://core.tcl.tk/tk/tktview?name=220431ffff (请参阅错误报告最底部的评论)。

报告声称它已修复,但也许它再次出现,或者您的 tkinter 版本足够旧,仍然存在该错误。

关于python - Tkinter tkMessageBox 禁用 Tkinter 键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48983443/

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