疯狗马德森 发表于 2023-11-2 14:59:50

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


本来以为自己敲的有问题,后来直接拷贝甲鱼老师的也是什么都不出,试了试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()

isdkz 发表于 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()


这样修改后,你应该能够在窗口中看到菜单栏了。希望能帮到你!

Mike_python小 发表于 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()


希望这个解决方案能够帮助到你!如果还有其他疑问,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

疯狗马德森 发表于 2023-11-2 15:02:57

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

依旧没有显示

疯狗马德森 发表于 2023-11-2 15:37:44

Mike_python小 发表于 2023-11-2 15:01
在 macOS 上使用 Tkinter 创建菜单出现问题的解决方案:

问题描述:

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

是不是MAC的问题,创建分级下拉菜单可以,单独一个menu不行,这种鼠标右键弹出也不行

歌者文明清理员 发表于 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()
页: [1]
查看完整版本: MAC运行TKinter的MENU功能什么也没有