鱼C论坛

 找回密码
 立即注册
查看: 2274|回复: 5

MAC运行TKinter的MENU功能什么也没有

[复制链接]
发表于 2023-11-2 14:59:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

本来以为自己敲的有问题,后来直接拷贝甲鱼老师的也是什么都不出,试了试optionmenu没有问题可以显示



from tkinter import *

root = Tk()

def callback():
    print("~被调用了~")

# 创建一个弹出菜单
menu = Menu(root, tearoff=False)
menu.add_command(label="撤销", command=callback)
menu.add_command(label="重做", command=callback)

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()
截屏2023-11-02 14.56.40.jpeg

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-2 15:00:19 | 显示全部楼层
这个问题可能是因为在 macOS 上,Tkinter 的菜单栏可能不会显示在窗口的顶部,而是显示在屏幕的顶部。这可能导致你在窗口中看不到菜单栏。

要解决这个问题,你可以尝试使用  useTk=True  来创建  Tk  对象,这样可以强制菜单栏显示在窗口的顶部。修改你的代码如下:
from tkinter import *

root = Tk(useTk=True)  # 使用 useTk=True 创建 Tk 对象

def callback():
    print("~被调用了~")

# 创建一个弹出菜单
menu = Menu(root, tearoff=False)
menu.add_command(label="撤销", command=callback)
menu.add_command(label="重做", command=callback)

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()

这样修改后,你应该能够在窗口中看到菜单栏了。希望能帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-2 15:01:31 | 显示全部楼层
在 macOS 上使用 Tkinter 创建菜单出现问题的解决方案:

问题描述:

在 macOS 上使用 Tkinter 创建菜单时,可能会发现菜单功能无法正常使用,或者菜单栏显示为空白。这是由于 macOS 默认会隐藏菜单栏,需要通过特定的参数来显示菜单栏。

解决方案:

在创建 Menu 对象时,添加一个名为 apple 的选项,指定参数 nameTk,如下所示:
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()
希望这个解决方案能够帮助到你!如果还有其他疑问,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-2 15:02:57 | 显示全部楼层
isdkz 发表于 2023-11-2 15:00
这个问题可能是因为在 macOS 上,Tkinter 的菜单栏可能不会显示在窗口的顶部,而是显示在屏幕的顶部。这可 ...

依旧没有显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-2 15:37:44 | 显示全部楼层
Mike_python小 发表于 2023-11-2 15:01
在 macOS 上使用 Tkinter 创建菜单出现问题的解决方案:

问题描述:

试了试这个还是啥也不显示

是不是MAC的问题,创建分级下拉菜单可以,单独一个menu不行,这种鼠标右键弹出也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-2 18:31:26 | 显示全部楼层
from tkinter import *

root = Tk()

def callback():
    print("~被调用了~")

# 创建一个弹出菜单
menu = Menu(root, tearoff=False)
menu.add_command(label="撤销", command=callback)
menu.add_command(label="重做", command=callback)

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)
root.config(menu=menu)
mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 03:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表