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的替换欢迎框架。
我试过,但我不断收到一个错误,说'NoneType'对象没有名为'lift'的属性。 此外,lift方法是否会清除所有其他可见的帧,或者它是否会提升我选择的特定帧? – jules 2012-07-17 09:47:53
@juleszero:'lift'只会提高一个框架。至于NoneType错误,只需问自己“为什么这个对象设置为None?”。我的猜测是你正在做这样的事情:'frame = Frame(...)。grid(...)',这导致'frame'为None。底线是,您的代码中存在一个错误,导致您在设置为None的变量上调用“lift”。由于您没有发布任何代码,因此无法获得更具体的代码。 – 2012-07-17 10:38:39
这就是我一直在设置我的所有框架!我不知道它是否导致该对象被设置为“无”。我已经用我的代码更新了我的帖子,希望这会有所帮助。 – jules 2012-07-17 11:45:13