我想要一个显示模式对话框的菜单。一切都很好,直到我添加一个加速器。如果我这样做并使用加速器访问对话框,它会挂起。我怀疑从“绑定”调用时,在模式对话框中使用的 wait_window 与主循环有某种冲突。这是一个例子:
import tkinter
from tkinter import simpledialog
class App(tkinter.Tk):
def __init__(self):
tkinter.Tk.__init__(self)
self.bind_all("<Control-f>", lambda event: self.menu_file())
menubar = tkinter.Menu(self)
fileMenu = tkinter.Menu(menubar, tearoff=False)
fileMenu.add_command(label="File", underline=0,
command=self.menu_file, accelerator="Control+f")
# fileMenu.add_command(label="File", underline=0,
# command=self.menu_file)
menubar.add_cascade(label="File",underline=0, menu=fileMenu)
self.config(menu=menubar)
def menu_file(self):
simpledialog.Dialog(self,"Message")
app=App()
app.mainloop()
如果在上面的代码中我注释掉了添加加速器的那一行,并且取消注释后面的那一行,就没有挂断(当然我仍然可以使用 Ctrl+F 来访问对话框)。唯一的问题是“文件”菜单旁边没有显示加速键字符串。根据我在网上找到的 tkinter 文档,添加加速器应该只会改变菜单的显示方式而不是其他任何东西,所以我真的很困惑。有人有什么想法吗?(我当然可以通过修改要显示的字符串来模拟加速器,但我不认为这是一个优雅的解决方案。)