【发布时间】:2014-10-06 09:38:10
【问题描述】:
我使用 Tkinter 创建了一个带有不同菜单选项的 GUI(类似的示例如下所示)。每个菜单都有不同的命令,单击时会创建一个新框架。现在发生的情况是,如果我切换到不同的命令,新帧会堆叠在当前帧下方,而不是替换旧帧。
我想知道前进的最佳方式是什么。
import Tkinter as tkinter
root = tkinter.Tk()
root.minsize(400,300)
welcome = tkinter.Frame(root).grid()
label = tkinter.Label(welcome, text="Welcome to my program").grid(row=0, column=3)
button = tkinter.Button(welcome,text="Exit",command=root.destroy).grid(row=3, column=1)
def newFrame():
newFrame = tkinter.Frame(root).grid()
newFrame_name = tkinter.Label(newFrame, text="This is another frame").grid()
menu = tkinter.Menu(root)
root.config(menu=menu)
main_menu = tkinter.Menu(menu)
menu.add_cascade(label="Main Menu", menu= main_menu)
main_menu.add_command(label="New Frame", command=newFrame)
main_menu.add_command(label="Another Frame", command=newFrame)
#menu.add_command(label="Exit", command=root.destroy, menu= filemenu)
root.mainloop()
现在,如果我在新框架和另一个框架之间切换,窗口会堆叠起来,但我希望一个窗口替换另一个。
有什么想法吗?谢谢。
【问题讨论】:
-
您的代码充满了错误。缩进关闭,并且有错别字和其他错误。例如,您在
Generator中引用了Frame1,但Frame1未定义。还有一堆似乎与问题无关的代码。 -
所有这些动态创建的框架是否都相同,或者它们是否都有自定义内容?
-
@BryanOakley 这是一个非常示例的内容。请不要查看缩进或其他错误。问题是我不可能分享确切的代码。所以我所做的就是让我知道我在做什么。问题是 - 当我从一个菜单点击到另一个菜单而不堆叠框架时,我可以在框架之间切换吗?
-
伙计们,我想我做到了。所以这就是我所做的。我不知道它是否是pythonic。每当调用菜单按钮时,都会生成框架。我将其添加到列表中,然后使用 .pack_forget() 隐藏所有现有帧,即在长度为 n 的列表中,我隐藏了 n-1 个帧。这确保当前帧仍然存在,而我使用的所有其他帧都消失了。这似乎有效。感谢大家的cmets
-
如果您不能给我们提供实际复制问题的代码,我们很难为您提供帮助。如果您希望我们花时间尝试找出您的代码,那么您也应该愿意花时间编写高质量的问题。但老实说,代码不适合我们。