2014-06-15 2 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

Вы пренебрегаете объявлением text и label глобальными, поэтому clear_screen не работает.

Звонок pack_forget не уничтожает виджеты, он только их скрывает. Ваш код создает новые виджеты каждый раз, что означает, что у вас есть утечка памяти - вы постоянно создаете все больше и больше виджетов каждый раз, когда вы нажимаете кнопку.

Самый простой способ добиться того, что вы хотите, - поместить все виджеты в фрейм, а затем уничтожить и воссоздать фрейм. Когда вы уничтожаете виджет, все дочерние элементы автоматически уничтожаются. Это также упрощает обслуживание, поскольку вам не нужно ничего менять, если вы добавляете больше виджетов.

Смежные вопросы