2017-12-05 4 views
-2

Also ich versuche, Daten vom Benutzer zu erhalten, und dann möchte ich das GUI-Fenster schließen, und speichern Sie die Daten in Variablen für meinen Code direkt nach dem Klicken auf "Enter". Aber das Fenster bleibt einfach dort. Wie bekomme ich es, um die Daten zu speichern, und das GUI-Fenster gleichzeitig zu schließen?Daten speichern und Tkinter-Fenster zur gleichen Zeit schließen

#pop up window 
def show_entry_fields(): 
    global ModelNumber,PowerOutput,SerialNumber 

    ModelNumber=e1.get() 
    PowerOutput=e2.get() 
    SerialNumber=e3.get() 

master = Tk() 
master.title("Model Information") 

master.geometry("500x300") 

master.iconbitmap("square.ico") 

Label(master, text="Model Information").grid(row=0,column=1) 
Label(master, text="Model Number ").grid(row=2) 
Label(master, text="Power Output (w)").grid(row=3) 
Label(master,text="Serial Number").grid(row=4) 


e1 = Entry(master) 
e2 = Entry(master) 
e3 = Entry(master) 


e1.grid(row=2, column=1) 
e2.grid(row=3, column=1) 
e3.grid(row=4, column=1) 


Button(master, text='Enter', command=show_entry_fields).grid(row=6, 
column=1, sticky=W, pady=4) 




mainloop() 
master.withdraw() 
+0

Was meinen Sie speichern die Daten? Speichern Sie die Daten wo, eine Datei? Mit Schließen meinst du die ganze Anwendung oder ein bestimmtes Fenster zu schließen? Wie verhält sich der von Ihnen gepostete Code? – Nae

+0

Im Moment scheint alles, was Sie tun müssen, 'master.withdraw()' in 'show_entry_fields' zu verschieben. Aber ich glaube deine Frage ist unklar. – Nae

Antwort

3

Ich verstehe nicht ganz die Frage . Es scheint, als ob Sie nur eine Funktion erstellen müssen, die beide Aktionen ausführt.

def save_and_quit() 
    show_entry_fields() 
    master.quit() 

... 
button = Button(master, text='Enter', command=save_and_quit) 
button.grid(row=6, column=1, sticky=W, pady=4) 
-3

Dies ist, was ich getan habe. Es tut, was die show_entry_fields Funktion nach innen hat (die die Daten als globale Variablen zu speichern), und es Fahrt des GUI-Fensters wird gleich nachdem ich „Enter“ drücken

Button(master, text='Enter', command=lambda: [f() for f in [show_entry_fields, master.quit]]).grid(row=6, column=1, sticky=W, pady=4) 
+0

Was Sie tun, wird als schlechte Praxis angesehen. Sie sollten 'master.quit' in' show_entry_fields' setzen und wenn Sie diese Funktion nicht unterbrechen möchten, sollten Sie stattdessen eine neue Funktion definieren, die beide anderen Funktionen aufruft. – Nae

+2

Ich rate Ihnen dringend, 'Lambda' nicht so zu verwenden. Es macht Ihren Code wirklich schwer zu lesen, zu verstehen, zu debuggen und zu warten. Erstellen Sie eine ordnungsgemäße Funktion. Sie sollten 'Lambda' vermeiden, es sei denn, Sie müssen es unbedingt verwenden. In diesem Fall gibt es keinen Grund, "Lambda" zu verwenden. Es fügt Komplexität hinzu, ohne einen Wert hinzuzufügen. –

Verwandte Themen