Mac 中 Tkinter 的菜单栏不起作用



我正在努力学习tkinter,并且正在学习菜单栏部分。我正在创建一个简单的GUI窗口,并尝试显示菜单栏。但它并没有在那里展出。在很多地方,他们说菜单栏将显示在mac one中,而不是窗口本身,但我的菜单栏也没有显示在那里。这是我正在使用的代码

from tkinter import *
root = Tk()
root.geometry("1000x700")
root.minsize(1000, 700)
root.maxsize(1000, 700)
mainmenu = Menu(root)
mainmenu.add_command(label="hello", command=quit)
mainmenu.add_command(label="exit", command=lambda:print("hello"))
root.config(menu=mainmenu)
root.mainloop()

我试图创建一个带有菜单栏的窗口,代码是:

from tkinter import *
root = Tk()
root.geometry("1000x700")
root.minsize(1000, 700)
root.maxsize(1000, 700)
mainmenu = Menu(root)
mainmenu.add_command(label="hello", command=quit)
mainmenu.add_command(label="exit", command=lambda:print("hello"))
root.config(menu=mainmenu)
root.mainloop()

相反,它导致了一个空白窗口,甚至在mac上也没有菜单栏。

OSX不允许将命令直接放在主菜单上。在主菜单上,您只能添加级联。官方文件中巧妙地提到了这一点:

在Macintosh上,只要顶层在前面,此菜单的级联项就会出现在主监视器顶部的菜单栏中。在Windows和Unix上,此菜单项将显示在窗口顶部的菜单栏中。

请注意,它只提到Mac的级联项,但提到其他平台的所有项。

mainmenu = Menu(root)
root.config(menu=mainmenu)
filemenu = Menu(mainmenu)
mainmenu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="hello", command=quit)
filemenu.add_command(label="exit", command=lambda:print("hello"))

替换此:

root.config(menu=mainmenu)

至:

root['menu'] = mainmenu

最新更新