我有这段代码:
# -*- 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()
我希望这个程序以这种方式工作,如果我点击按钮"主页面",它将重新创建主页面。但它并没有。 Textfield和按钮不会再出现。我怎么能让它正常工作?
答案 0 :(得分:1)
您忽略了将text
和label
声明为全局,因此clear_screen
失败。
调用pack_forget
不会破坏小部件,它只会隐藏它们。您的代码每次都会创建新的小部件,这意味着您有内存泄漏 - 每次单击按钮时都会创建越来越多的小部件。
实现所需内容的最简单方法是将所有小部件放在一个框架中,然后销毁并重新创建框架。销毁窗口小部件时,任何子窗口小部件都会自动销毁。这也使维护更容易,因为如果添加更多小部件,则无需进行任何更改。