如何使 Menu.add_command() 在 Mac 上的 tkinter 中工作?

Posted

技术标签:

【中文标题】如何使 Menu.add_command() 在 Mac 上的 tkinter 中工作?【英文标题】:How to make Menu.add_command() work in tkinter on the Mac? 【发布时间】:2015-01-12 20:58:41 【问题描述】:

如果我在 OS X 上创建一个 tkinter 菜单并尝试使用 add_comand() 向它添加一个菜单按钮,菜单中不会显示任何内容。

如果下面的代码在 Ubuntu 上运行,我会得到一个菜单栏,其中包含两个标记为“红色”和“蓝色”的命令,它们可以更改窗口的背景颜色。

在 OS X 10.10.1 (Yosemite) 上,按钮不会出现。我知道我可以使用红色和蓝色命令创建一个下拉菜单,但在我的真实应用程序中,我不想这样做。

from platform import python_version_tuple

major = python_version_tuple()[0]

if major == '3':
    import tkinter as tk
else:
    import Tkinter as tk

root = tk.Tk()

fr = tk.Frame(root, height = 200, width = 200)
fr.pack()
menu = tk.Menu(root)
root.configure(menu=menu)
menu.add_command(label='Red', command=lambda:fr.configure(bg='red'))
menu.add_command(label='Blue', command=lambda:fr.configure(bg='blue'))

root.mainloop()

你能告诉我该怎么做吗?

【问题讨论】:

虽然某些系统允许您这样做,但这会导致您的应用程序的可用性非常差,除非您非常小心地明确哪些项目是菜单以及何时是按钮。最好只在您的菜单栏上有下拉菜单。 【参考方案1】:

我认为您不能在 OS X 上使用本机(“Aqua”)Tk 来做到这一点,您可能不应该尝试。 OS X 原生菜单不能那样工作,Tk 尝试遵循 Apple 的Human Interface Guide for menus。您需要有一个带有下拉级联的菜单栏。

TkDocs 网站很好地介绍了Tk menus and their platform differences.(您可以在 OS X 上使用基于 X11 的 Tk,但不建议这样做,因为 Apple 不再提供 X11 服务器对于 OS X 用户来说,OS X 和您的应用程序的外观和行为都会很奇怪。)

【讨论】:

以上是关于如何使 Menu.add_command() 在 Mac 上的 tkinter 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

菜单中的图像和标签

非级联类型的菜单栏项目在 Mac OSX 的 Tkinter 上不起作用

如何使嵌入视频在移动设备上响应

如何使“滚动条”出现在左侧?

如何使 ProgressBar 在 LibGDX 中工作?

如何使 UIButton 悬垂在父视图上并仍然使其全部可选?