Tkinter,在新窗口中添加菜单选项
问题描述:
所以我很困惑如何将菜单选项添加到我的窗口中......我清楚地可以制作菜单栏,并知道如何做到这一点,就像您可以在我的代码中看到的一样。然而,我从一个窗口改变到另一个窗口的方式会影响事物,因为我只有1个Tk.tk窗口。该程序的其余部分在该窗口内运行。我希望能够更改每个窗口的标题和菜单。Tkinter,在新窗口中添加菜单选项
class start(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
tk.Tk.title(self, "Group Registration")
menubar = tk.Menu(container)
tk.Tk.config(self, menu=menubar)
fileMenu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label="File", menu=fileMenu)
fileMenu.add_command(label="Exit", command=quit)
for F in (begin, admin_main, members):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(begin)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
frame.event_generate("<<showframe>>")
class begin(tk.Frame):
pass
class admin_main(tk.Frame):
def __init__(self, parent, controller):
self.bind("<<showframe>>", self.on_show_frame)
def on_show_frame(self, event):
menubar = Menu(self)
fileMenu = Menu(menubar)
menubar.add_cascade(label="File", menu=fileMenu)
fileMenu.add_command(label="Create member list")#command=)
fileMenu.add_command(label="Load member list")#command=)
fileMenu.add_command(label="Email")#command=)
fileMenu.add_separator()
fileMenu.add_command(label="Exit")
print"ok"
class members(tk.Frame):
pass
app = start()
app.geometry("600x400")
app.mainloop()
这些类是我的新窗口。这只是短版本的代码,以显示窗口如何操作...
(修订版) 解释器将打印页面打开时“确定”。没有修改过的语法,但是,我没有新的菜单栏显示。
答
你非常接近(除了所有在你的问题的代码中的错误的...)
但是,假设你可以修复所有的错误,你就错过了唯一的一块是实际配置主窗口以使用您创建的菜单栏。
您需要添加几行来告诉窗口有关菜单栏。你可以通过调用winfo_toplevel()
来获得窗口,然后你可以配置该窗口小部件的菜单:
def on_show_frame(self, event):
menubar = tk.Menu(...)
...
top = self.winfo_toplevel()
top.configure(menu=menubar)
+0
真棒,这工作很好...我要查找winfo_toplevel(),看看有什么需要。我正在学习一吨。我试图做tk.configure,它不会工作,所以我知道我错过了一些东西。另外,我的问题中的代码只是给你一个我如何设置我的类,我的实际代码我充分运作的例子。谢谢,因为对我有耐心! – ricky6991
你看了下面的内容吗? https://stackoverflow.com/questions/35029188/how-would-i-make-a-method-which-is-run-every-time-a-frame-is-shown-in-tkinter –
我现在有大声笑...我没有使用event_generate之前,但从我在谷歌上阅读我可以做的事情,如或类似的东西。我不明白如何使用它来添加到我的菜单。我会在event_generate()中添加代码,或者像示例所示那样绑定它,并在def on_show_frame()中添加代码。 –
ricky6991
您不要将事件添加到菜单中。你使用even来调用一个创建菜单的函数。您在上面的代码中使用菜单的方式,只有在页面出现时调用的函数中执行该菜单,而不是在创建页面的代码中执行。 –