2016-11-17 3 views
0

Ich habe ein grundlegendes TK-Fenster gemacht und einen Knopf gedrückt, um alle Widgets zu löschen, aber ein Abdruck der Widgets ist übrig geblieben.Tkinter Programmierung

Wie kann ich diesen leeren Teil entfernen? Problem weiterhin besteht nach wie vor

from tkinter import * 

class Window(Frame): 

    def __init__(self, master=None): 
    Frame.__init__(self, master)     
    self.master = master 
    self.init_window() 
    def init_window(self): 
    self.master.title("SAMPLE") 
    self.pack(expand=1) 
    loginb = Button(self, text="Log in",command=self.LogIn, height=2, width=20) 
    loginb.grid(row=1) 

    def Quit(self): 
     exit() 
    def LogIn(self): 
     for widget in Frame.winfo_children(self): 
       widget.destroy() 
     self.grid_forget() 
     self.grid() 
     e1 
     self.L = {} 
     Label1 = Label(text="Enter your code:").grid(row=1,column=0) 
     E1 = Entry(textvariable=e1).grid(row=1,column=1) 
     def F1(): 
       self.L["Code"] = e1.get() 
       return 
     B1 = Button(text="Ok", command=F1).grid(row=1,column=2) 
root = Tk() 
root.geometry("700x700") 
app = Window(root) 
root.mainloop() 

Antwort

1

Sie benötigen Rahmen entfernen als auch selbst. Es ist der Rahmen, der übrig bleibt.

def LogIn(self): 
    for widget in Frame.winfo_children(self): 
     widget.destroy() 
    self.pack_forget() 

in Ihrem Menü Blick aber wahrscheinlich werden Sie diese Tasten müssen wieder so statt neu zu erstellen, sich jedes Mal nach widget.destroy() verwenden, sollten Sie widget.grid_forget() verwenden und widget.grid() verwenden, wenn sie wieder benötigt werden.

EDIT: eine Dummy-Menü-Taste, um hinzugefügt zu zeigen, wie andere Widgets mit self.pack()

class Window(Frame): 
    def __init__(self, master=None): 
    ... 
    ... 
    ... 
    ... 
    file.add_command(label="dummybutton", command=self.add_widget) 

    def LogIn(self): 
     for widget in Frame.winfo_children(self): 
       widget.destroy() 
     self.pack_forget() 

    def add_widget(self): 
     #here you are packing again 
     #since pack doesn't remember config options, 
     #you need to specify those here as well like expand etc. 
     self.pack(expand=1) 
     #adding dummy widget to show it adds without a problem 
     Button(self, text="dummy widget").pack() 
+0

Packrahmen wieder erste, hinzufügen. Dann machen Sie Ihre Widget-Ergänzungen. – Lafexlos

+0

@CompStudent redigierte Antwort, um ein Beispiel hinzuzufügen, wie man es macht. – Lafexlos

+0

, aber mein Code (der auch ein Eintrag-Widget enthält) gibt einen Fehler: kann das Geometry-Manager-Grid nicht verwenden. die bereits über Slaves verfügt, die von pack – CompStudent