2012-07-16 95 views
1

我目前正在使用Python中的Tkinter模块进行项目工作。我正在使用菜单小部件,并且菜单上的每个命令都有另一个与其关联的命令。每个命令都会打开一个新框架。我正在使用网格几何管理器。如何切换到Python中的Tkinter中的不同框架

我的问题是,我希望用户能够从帧切换到帧,但是当我尝试这样做时,帧彼此重叠而不是切换。我如何获得活动框架来隐藏并打开一个新框架?我不想遍历可能的框架列表,并告诉它们全部隐藏。

这里是我到目前为止已经编写的代码:

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) 

#menu.add_command(label="Exit", command=root.destroy, menu= filemenu) 


root.mainloop() 

当用户从菜单选择新的帧的选择,我希望newFrame的替换欢迎框架。

回答

1

如果您使用placegrid将框架堆叠在一起,您可以简单地使用lift方法更改堆叠顺序。

+0

我试过,但我不断收到一个错误,说'NoneType'对象没有名为'lift'的属性。 此外,lift方法是否会清除所有其他可见的帧,或者它是否会提升我选择的特定帧? – jules 2012-07-17 09:47:53

+0

@juleszero:'lift'只会提高一个框架。至于NoneType错误,只需问自己“为什么这个对象设置为None?”。我的猜测是你正在做这样的事情:'frame = Frame(...)。grid(...)',这导致'frame'为None。底线是,您的代码中存在一个错误,导致您在设置为None的变量上调用“lift”。由于您没有发布任何代码,因此无法获得更具体的代码。 – 2012-07-17 10:38:39

+0

这就是我一直在设置我的所有框架!我不知道它是否导致该对象被设置为“无”。我已经用我的代码更新了我的帖子,希望这会有所帮助。 – jules 2012-07-17 11:45:13

相关问题