tkinter菜单加速器复制回调

问题描述 投票:0回答:1

[我在MacOS 10.14.6上看到运行Python 3.7.6和tkinter 8.6的某些奇怪行为。

我已经将“删除”绑定到一个功能,并且还添加了一个触发相同功能的菜单命令。我还在菜单命令中添加了一个加速器选项,该选项仅显示文本,而实际上不创建快捷方式(如here所述。)>

除了,在这种情况下,它[[确实]]似乎创建了快捷方式:按下“ Delete”键两次触发我的功能:一次是绑定命令,第二次是从加速器。删除绑定或加速器将导致它仅触发一次;当然,同时删除这两个键会使绑定不再激活。从菜单触发时,它可以正常工作,而其他键或组合键似乎不会发生这种情况。

我不确定是否错过了有关Tkinter编程的详细信息,还是遇到了技术问题。我确保尝试使用其他键盘,并且不确定Mac上的Tkinter是否可能是错误。

以下代码始终显示我的问题:

from tkinter import * def bar(event=None): print("Called bar") def foo(event=None): print("Called foo") root = Tk() menubar = Menu(root) filemenu = Menu(menubar, tearoff=0) #works fine filemenu.add_command(label="Something else", command=bar, accelerator="Control-s") root.bind("<Control-s>", bar) #triggers twice when using the "Del" key filemenu.add_command(label="Delete a thing", command=foo, accelerator="Delete") root.bind("<Delete>", foo) menubar.add_cascade(label="File", menu=filemenu) root.config(menu=menubar) root.mainloop()

触发每个快捷方式一次会产生以下输出:

Called bar Called foo Called foo

所以这给我两个问题:

  1. 这可以被其他人复制吗?

  • 我应该如何解决或解决它?
  • 我看到在MacOS 10.14.6上运行Python 3.7.6和tkinter 8.6有一些奇怪的行为。我已经将“删除”绑定到一个功能,并且还添加了一个触发相同功能的菜单命令。我也...

    python-3.x tkinter callback menu
    1个回答
    0
    投票
    您的代码在运行windows的我的Python 3.7系统上运行良好,但是相信tkinter在MacOS上存在一些问题,您可以尝试使用主题的tk ttk Menubutton小部件,看看它是否更好。 ttk菜单的外观可能与tk菜单设计略有不同。

    这是您发布的带有ttk Menubutton的代码:

    © www.soinside.com 2019 - 2024. All rights reserved.