2016-11-18 1 views
-5

Hier wie ich anfange mit ein paar Widgets und dann versuchen, mehr Widgets durch Löschen der vorherigen hinzuzufügen (ich hatte dies früher gefragt und bekam eine Antwort, aber das Problem bestand immer noch). Beim Versuch, die vorherigen Widgets zu entfernen, bleibt ein Abdruck erhalten. Bitte helfen Sie mir, dies zu entfernen oder eine Alternative vorzuschlagen.Tkinter Programmierung 2

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) 
    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() 
+0

entfernen diese Frage viel Kontext fehlt. Wer ist @Lafexlos und welche Änderungen haben Sie von Ihnen verlangt? Wozu brauchst du Hilfe? Alles, was Sie getan haben, ist Code geschrieben, ohne eine Frage zu stellen. –

+0

'var = Widget(). Grid()' weisen Sie 'None' immer' var' zu, weil 'grid()' 'None' zurückgibt - Sie müssen' var = Widget() 'und' var.grid() ' – furas

+0

Was ist' e1' im Code ??? – furas

Antwort

0

Sie haben vergessen, parent in Widgets ie zu verwenden. Label(self, ...) so setzen Sie Widgets automatisch in root (Hauptfenster), nicht in self (Frame). Und später entfernen Sie Widgets von self, aber Elemente in root bleibt.

from tkinter import * 

class Window(Frame): 

    def __init__(self, master=None): 
    Frame.__init__(self, master)     
    self.init_window() 

    def init_window(self): 
    self.master.title("SAMPLE") 
    self.pack(expand=1) 

    l = Button(self, text="Log in", command=self.login) 
    l.grid(row=1) 

    def remove_all(self): 
    for widget in self.winfo_children(): 
     widget.destroy() 

    def login(self): 
    self.remove_all() 

    self.var = StringVar() 

    self.L = {} 

    l = Label(self, text="Enter your code:") 
    l.grid(row=1, column=0) 

    e = Entry(self, textvariable=self.var) 
    e.grid(row=1, column=1) 

    b = Button(self, text="Ok", command=self.fun) 
    b.grid(row=1, column=2) 

    def fun(self): 
    self.remove_all() 

    self.L["Code"] = self.var.get() 

    l = Label(self, text="Code: " + self.L["Code"]) 
    l.grid(row=1, column=0) 


root = Tk() 
root.geometry("700x700") 
app = Window(root) 
root.mainloop() 

Sie können eine andere Frame gruppieren Widgets verwenden und diese Frame mit allen Widgets innerhalb

from tkinter import * 

class Window(Frame): 

    def __init__(self, master=None): 
    Frame.__init__(self, master)     
    self.init_window() 

    def init_window(self): 
    self.master.title("SAMPLE") 
    self.pack(expand=1) 

    # create empty `f`  
    self.f = Frame(self) 
    self.f.pack(expand=1) 

    l = Button(self.f, text="Log in", command=self.login) 
    l.grid(row=1) 

    def login(self): 
    # remove old `f` 
    self.f.destroy() 

    # create empty `f`  
    self.f = Frame(self) 
    self.f.pack(expand=1) 

    self.var = StringVar() 

    self.L = {} 

    l = Label(self.f, text="Enter your code:") 
    l.grid(row=1, column=0) 

    e = Entry(self.f, textvariable=self.var) 
    e.grid(row=1, column=1) 

    b = Button(self.f, text="Ok", command=self.fun) 
    b.grid(row=1, column=2) 

    def fun(self): 
    # remove old `f` 
    self.f.destroy() 

    # create empty `f`  
    self.f = Frame(self) 
    self.f.pack(expand=1) 

    self.L["Code"] = self.var.get() 

    l = Label(self.f, text="Code: " + self.L["Code"]) 
    l.grid(row=1, column=0) 


root = Tk() 
root.geometry("700x700") 
app = Window(root) 
root.mainloop()