Python Tkinter tkMessageBox禁用Tkinter密钥绑定
下面是一个非常简单的示例:Python Tkinter tkMessageBox禁用Tkinter密钥绑定,python,events,tkinter,keyboard-events,messagebox,Python,Events,Tkinter,Keyboard Events,Messagebox,下面是一个非常简单的示例: from Tkinter import * import tkMessageBox def quit(event): exit() root = Tk() root.bind("<Escape>", quit) #tkMessageBox.showinfo("title", "message") root.mainloop() 通过单击按钮使用tkMessageBox,不会影响按键绑定,即按Esc键继续工作 如果我理解这个问题,那么如果在调用ma
from Tkinter import *
import tkMessageBox
def quit(event):
exit()
root = Tk()
root.bind("<Escape>", quit)
#tkMessageBox.showinfo("title", "message")
root.mainloop()
通过单击按钮使用
tkMessageBox
,不会影响按键绑定,即按Esc键继续工作 如果我理解这个问题,那么如果在调用mainloop
之前调用tkMessageBox.showInfo()
,就会出现不良行为。如果是这样的话,我想这是windows上tkinter的一个已知错误
解决办法很简单:不要那样做。如果您需要在程序开始时显示对话框,请使用after
将其安排在mainloop启动后显示,或在显示对话框之前调用update
例如:
root = Tk()
root.after_idle(msg_test)
root.mainloop()
最初的bug是很久以前报告的,tk bug数据库已经移动了一两次,所以我很难找到与最初问题的链接。这里有一期2000/2001的文章提到了这一点:(见bug报告底部的评论)
该报告声称它已修复,但可能它再次出现,或者可能您的tkinter版本已经足够旧,仍然存在该漏洞 您是否将注意力重新集中到
root
窗口?这个问题似乎对我和python 3.7都适用所有键盘事件。您的操作系统是什么?@BryanOakley我能够在Windows 7和10上重现这个问题。是的,我应用了焦点,甚至重复了绑定。没有效果。我使用的是Windows 7。如我所说,通过按钮调用msg_test()
没有问题。但是您建议在tkMessageBox
之前使用root.update()
,这是一个令人愉快的启示!它可以完美地使用tkMessageBox
(直接在主体中)任意多个用途!谢谢
root = Tk()
root.after_idle(msg_test)
root.mainloop()