【发布时间】:2017-03-13 16:30:21
【问题描述】:
我已经对此进行了广泛的搜索,但根据我的发现无法获得完整的答案。 我正在使用 tkinter 在 Python3 中编写 GUI。一切都将在课程中进行,包括“菜单”课程。 几个问题 - 我想使用 for 循环来填充我的菜单项和子项(尚未实现)。 - 我想对“容器”类显示的每一帧都执行此操作,但是当这些选项不适用时,我希望菜单中的某些项目被禁用(灰显)。即在没有加载任何内容的情况下启动程序“保存”按钮没有意义,所以我会禁用它,直到创建“新”项目或打开现有项目。
到目前为止我的代码。
import tkinter as tk
from tkinter import ttk, Menu
class MainFrame(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
#display manubar
menubar = MenuBar(self)
self.config(menu=menubar)
self.frames = {}
for F in (StartPage, PageOne, PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = ttk.Label(self, text="Page One", font=LARGE_FONT)
label.pack(pady=10, padx=10)
button = ttk.Button(self, text="Visit Page 2",
command=lambda: controller.show_frame(PageTwo))
button1 = ttk.Button(self, text="Go to Start Page",
command=lambda: controller.show_frame(StartPage))
button.pack()
button1.pack()
class PageTwo(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = ttk.Label(self, text="Page Two", font=LARGE_FONT)
label.pack(pady=10, padx=10)
button = ttk.Button(self, text="Visit Page 1",
command=lambda: controller.show_frame(PageOne))
button1 = ttk.Button(self, text="Go to Start Page",
command=lambda: controller.show_frame(StartPage))
button.pack()
button1.pack()
class MenuBar(tk.Menu):
def __init__(self, parent):
tk.Menu.__init__(self, parent)
fileMenu = tk.Menu(self, tearoff=False)
self.add_cascade(label="File",underline=0, menu=fileMenu)
fileMenu.add_command(label="Page One", underline=0,
command=self.onexit)
fileMenu.add_command(label="Page Two", underline=1,
command=lambda:self.onexit)
fileMenu.add_command(label="Exit", underline=1, command=self.onexit)
def onexit(self):
quit()
if __name__ == "__main__":
app = MainFrame()
app.mainloop()
如何使用文件菜单中的选项调用“PageOne”或“Pagetwo”?出于测试目的,我现在只是退出程序,这样我就可以运行程序而不会出错。
【问题讨论】:
-
我不确定我是否在您的问题中看到了问题。您是否在问如何让显示“第二页”的菜单项显示
PageTwo框架? -
另外,我们也不想知道整个项目的范围。在大多数情况下,这无关紧要。我们需要的是Minimal, Complete, and Verifiable example。例如,我们不需要版权或不同的字体或背景图像来解决从菜单显示框架的问题。
-
这是我在 stackoverflow 上的第一篇文章。我已根据您的评论编辑了我的问题/代码。希望这能满足你一点:)。感谢您的提示。我还需要学习很多,未来的问题将更多地取决于stackoverflow标准