为什么 Tkinter 中的菜单会产生错误
why does the Menu in Tkinter produce an error
class Create(Tk):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.menubar = Menu(master = self)
self.menubar.add_command(label = "A", command= lambda: self.show_frame(A) )
self.menubar.add_command(label = "B", command= lambda: self.show_frame(B) )
self.menubar.add_command(label = "C", command= lambda: self.show_frame(C) )
self.menubar.add_command(label = "D", command= lambda: self.show_frame(D) )
self.config(menu=self.menubar)
global app
app = MainClass()
app.mainloop()
作为参考:MainClass 做了很多事情,但它也调用了 Create,作为其中的一部分,我将提出几个框架来向用户展示,这一切都在没有菜单的情况下工作,但我不断收到错误消息:
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))_tkinter.TclError: unknown option "-menu"
我搜索了这个并发现了另一个堆栈溢出问题(链接如下),它说你需要让你的 class 从 Tk 而不是 Frame 继承,但是我仍然遇到这个错误。
我错过了什么? (我是运行python版本3.8.1)
Tkinter Unknown Option -menu
问题是您将 class Create
的实例传递给 Frame.__init__
。 Create
继承自 Tk
。
尝试以下操作:
class Create(Tk):
def __init__(self, parent, controller):
Tk.__init__(self)
self.menubar = Menu(master = self)
self.menubar.add_command(label = "A", command= lambda: self.show_frame(A) )
self.menubar.add_command(label = "B", command= lambda: self.show_frame(B) )
self.menubar.add_command(label = "C", command= lambda: self.show_frame(C) )
self.menubar.add_command(label = "D", command= lambda: self.show_frame(D) )
self.config(menu=self.menubar)
这样做的缺点是,即使您正确继承了 Tk
,2 windows 也会出现,而且 Menu
不会有 Frame
小部件作为主人。
class Create(Tk):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.menubar = Menu(master = self)
self.menubar.add_command(label = "A", command= lambda: self.show_frame(A) )
self.menubar.add_command(label = "B", command= lambda: self.show_frame(B) )
self.menubar.add_command(label = "C", command= lambda: self.show_frame(C) )
self.menubar.add_command(label = "D", command= lambda: self.show_frame(D) )
self.config(menu=self.menubar)
global app
app = MainClass()
app.mainloop()
作为参考:MainClass 做了很多事情,但它也调用了 Create,作为其中的一部分,我将提出几个框架来向用户展示,这一切都在没有菜单的情况下工作,但我不断收到错误消息:
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))_tkinter.TclError: unknown option "-menu"
我搜索了这个并发现了另一个堆栈溢出问题(链接如下),它说你需要让你的 class 从 Tk 而不是 Frame 继承,但是我仍然遇到这个错误。
我错过了什么? (我是运行python版本3.8.1)
Tkinter Unknown Option -menu
问题是您将 class Create
的实例传递给 Frame.__init__
。 Create
继承自 Tk
。
尝试以下操作:
class Create(Tk):
def __init__(self, parent, controller):
Tk.__init__(self)
self.menubar = Menu(master = self)
self.menubar.add_command(label = "A", command= lambda: self.show_frame(A) )
self.menubar.add_command(label = "B", command= lambda: self.show_frame(B) )
self.menubar.add_command(label = "C", command= lambda: self.show_frame(C) )
self.menubar.add_command(label = "D", command= lambda: self.show_frame(D) )
self.config(menu=self.menubar)
这样做的缺点是,即使您正确继承了 Tk
,2 windows 也会出现,而且 Menu
不会有 Frame
小部件作为主人。