我正在尝试创建一个tkinter GUI应用程序,同时将我的代码组织到主应用程序,框架和菜单的类中。对于菜单,我是tkinter.menu的子类,但它给了我一堆默认菜单,不包括我创建的菜单和命令。我尽可能地将它剥离到以下说明问题的工作示例:
首先,我将tkinter.TK子类化,以创建包含主窗口和菜单的主窗口小部件。为了说明,我在文件菜单中添加了一个空方法作为命令添加。接下来,我将tkinter.Frame子类化为创建主框架。为了说明,我在框架中添加了一个文本框。最后,我将tkinter.Menu子类化为创建主菜单并添加了子菜单" File"和命令"打开"。
import tkinter
class Application(tkinter.Tk):
def __init__(self):
tkinter.Tk.__init__(self)
self.main = MainWindow(master=self)
self.menu = MainMenu(master=self)
self.main.pack(fill=tkinter.BOTH, expand=True)
def open(self):
pass
class MainWindow(tkinter.Frame):
def __init__(self, master):
tkinter.Frame.__init__(self)
self.master = master
self.textbox = tkinter.Text()
self.textbox.pack(fill=tkinter.BOTH, expand=True)
class MainMenu(tkinter.Menu):
def __init__(self, master=None):
tkinter.Menu.__init__(self, master=None)
self.master = master
self.file = tkinter.Menu(self)
self.add_cascade(label="File", menu=self.file)
self.file.add_command(label="Open", command=master.open)
if __name__ == "__main__":
Application().mainloop()
结果是我没有创建的一系列菜单,包括没有我的" Open"命令:
Here's a screen cap of the results.
我哪里错了?
答案 0 :(得分:0)
替换:
self.menu = MainMenu(master=self)
使用:
self['menu'] = MainMenu(master=self)
# or self["menu"] = MainMenu(master=self)
# or self.config(menu=MainMenu(master=self))
# or self.configure(menu=MainMenu(master=self))
或添加:
self['menu'] = self.menu
# or self["menu"] = self.menu
# or self.config(menu=self.menu)
# or self.configure(menu=self.menu)
之后的任何地方:
self.menu = ...
将您的菜单指定为 菜单到您的Toplevel
小部件。