2014-06-15 25 views
0

使用pack_forget时做出部件再次可见我有这样的代码:如何在Tkinter的

# -*- coding: utf-8 -*- 

def clear_screen(): 
    button2.pack_forget() 
    button3.pack_forget() 
    text.pack_forget() 
    label.pack_forget() 

def main_page(): 
    var = StringVar() 
    label = Label(root, textvariable=var) 
    var.set("Fill in the caps: ") 
    label.pack() 

    global text 
    text = Text(root,font=("Purisa",12)) 
    text.pack() 

    global button 
    button=Button(root, text ="Create text with caps.", command =lambda: full_function()) 
    button.pack() 

def clear_and_main(): 
    clear_screen() 
    main_page() 

def full_function(): 
    global button2 
    global button3 
    button3=Button(root, text ="Main page", command=lambda: clear_and_main()) 
    button3.pack() 
    button2=Button(root, text ="Answer") 
    button2.pack() 
    button.pack_forget() 

from Tkinter import * 

root = Tk() 

main_page() 

root.mainloop() 

我想这个程序工作的方式,如果我点击按钮“主页”,它会重新创建主页。但事实并非如此。文本框和按钮不会重新出现。我怎样才能让它工作正确?

回答

0

您忽略将textlabel声明为全局,因此clear_screen失败。

调用pack_forget不会销毁小部件,它只会隐藏它们。您的代码每次都会创建新的小部件,这意味着您有内存泄漏 - 每次单击该按钮时都会继续创建越来越多的小部件。

完成你想要的最简单的方法是将所有的小部件放在一个框架中,然后销毁并重新创建框架。当你销毁一个小部件时,任何子部件都会自动被销毁。这也使得它更容易维护,因为如果添加更多小部件,则不必更改任何内容。