繁体   English   中英

tkinter菜单加速器和模式对话框

[英]tkinter menu accelerators and modal dialog boxes

我想要一个显示模式对话框的菜单。 一切都很好,直到我添加了加速器。 如果我这样做并使用加速器访问对话框,它将挂起。 我怀疑从“绑定”中调用时,模态对话框中使用的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文档,添加加速器仅应更改菜单的显示方式,而无其他改变,所以我真的很困惑。 有任何想法吗? (我当然可以通过修改要显示的字符串来模拟加速器,但是我不认为这是一个优雅的解决方案。)

如我所知,这是Mac特定的错误。 按照针对Mac上已知的Tk错误建议的解决方法(请参阅链接 ),将将菜单方法与按键绑定的行更改为以下内容:

self.bind_all("<Command-f>", lambda event: self.after(100,self.menu_file))

正在“修复”该错误。 他们还建议将速度较慢的系统提高100到150。 嗯..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM