|
发表于 2023-11-2 15:01:31
|
显示全部楼层
在 macOS 上使用 Tkinter 创建菜单出现问题的解决方案:
问题描述:
在 macOS 上使用 Tkinter 创建菜单时,可能会发现菜单功能无法正常使用,或者菜单栏显示为空白。这是由于 macOS 默认会隐藏菜单栏,需要通过特定的参数来显示菜单栏。
解决方案:
在创建 Menu 对象时,添加一个名为 apple 的选项,指定参数 name 为 Tk,如下所示:
- menu = Menu(root, tearoff=False)
- root["menu"] = menu # 将菜单栏设置为新建的菜单对象
- menu.add_command(label="撤销", command=callback)
- menu.add_command(label="重做", command=callback)
- root.option_add("*tearOff", False) # 禁止菜单栏分离
复制代码
这段代码将创建一个带有两个命令的菜单,并将菜单栏设置为新建的菜单对象。注意需要将 tearoff 设置为 False,以禁止菜单栏分离,否则可能会导致菜单栏不显示。
同时,需要在创建 Tk() 对象后,添加以下代码来显示菜单栏:
- root.createcommand('::tk::mac::ShowMenuBar', lambda: True)
复制代码
完整的代码示例:
- from tkinter import *
- root = Tk()
- def callback():
- print("~被调用了~")
- # 创建一个弹出菜单
- menu = Menu(root, tearoff=False)
- root["menu"] = menu # 将菜单栏设置为新建的菜单对象
- menu.add_command(label="撤销", command=callback)
- menu.add_command(label="重做", command=callback)
- root.option_add("*tearOff", False) # 禁止菜单栏分离
- # 显示菜单栏
- root.createcommand('::tk::mac::ShowMenuBar', lambda: True)
- frame = Frame(root, width=512, height=512)
- frame.pack()
- def popup(event):
- menu.post(event.x_root, event.y_root)
- # 绑定鼠标右键
- frame.bind("<Button-3>", popup)
- mainloop()
复制代码
希望这个解决方案能够帮助到你!如果还有其他疑问,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!   |
|