Tkinter python:清除小部件的问题

时间:2014-12-13 15:06:00

标签: python user-interface tkinter widget

有人请帮我解决这个问题。

我在Tkinter Python中遇到以下问题。问题是文本与前一个文本重叠。和/或正在下面复制。

enter image description here

我尝试使用label.config(root).pack()代替Label(root, text="").pack() 这有点解决了它开始在前一篇文章中写的问题,但是有两个问题。

1:文本旧文本/ Entrys仍然存在,它只是覆盖。
2:这只适用于label.config,我也希望这可以使用按钮和Entrys(textbox)

我也尝试了.pack_forget().destroy(),但遗憾的是它没有做任何事情。


CODE

from tkinter import *
import pickle
import time
import os


def new_profile():
    global Var1, Var2
    var1 = StringVar()
    var2 = StringVar()

    Label(root, text="Create a new profile").pack()
    Label(root, text="User Name").pack()
    Entry(root, textvariable=var1).pack()

    Label(root, text="Password").pack()
    Entry(root, textvariable=var2).pack()

    Button(root, text="Create", command=create_profile).pack()
    Var1, Var2 = var1, var2
    return


def create_profile():

    text1 = Var1.get()
    text2 = Var2.get()
    print(text1)
    dict = {}
    dict['Name'] = text1
    dict['Password'] = text2


    pickle.dump(dict, open("test.txt", "wb"))


    dict1 = pickle.load(open("test.txt", "rb"))
    if dict1['Name'] == text1 and dict1['Password'] == text2:
        Label(root, text="").pack()
        Label(root, text="Profile creation successful", ).pack()
        Label(root, text="Name:" + " " + text1).pack()
        Label(root, text="Password:" + " " + text2).pack()

    else:
        Label(root, text="Something went wrong while creating your profile.", ).pack()
    return


def load_profile():
    select = "Load profile.."
    label.config(text=select)
    return



root = Tk()
root.geometry("500x400+300+300")
root.title("client")


menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="New Profile", command=new_profile)
filemenu.add_command(label="Load Profile", command=load_profile)
menubar.add_cascade(label="Profile Options", menu=filemenu)
root.config(menu=menubar)


label = Label(root)
label.pack()
root.mainloop()

1 个答案:

答案 0 :(得分:0)

创建一个数组,例如

on_screen = []
在开始时

然后命名您的小部件并将它们添加到数组

password_label = Label(root, text="Password").pack()
password = Entry(root, textvariable=var2).pack()
on_screen.append(password)
on_screen.append(password_label)

然后使用for循环来销毁数组中的所有小部件

for w in on_screen:
    w.destroy()