2016-09-10 3 views
-1

In dem Programm, das ich gemacht habe, drückt der Benutzer Enter und der eingegebene Text wird dann als eine Bezeichnung im Programm angezeigt. So wird das Etikett immer aktualisiert und dann in die nächste Zeile geschrieben. Das Problem ist, dass in der Textbox die vorherige Zeile, die der Benutzer eingegeben hat, dort bleibt, was bedeutet, dass Sie die Zeichenfolge in der Textbox manuell löschen müssen, um eine neue Zeile zu schreiben. Wie kann ich es so machen, dass Sie mit einer gelöschten Textbox beginnen? die Enter-Taste funktioniert auch, aber es scheint, dass, wenn ich auf die Schaltfläche „Zurück“ klicken, um es gibt mir eine Fehlermeldung:Update-Label behält vorherigen Text

Typeerror: evaluate() 1 erforderlich Positions Argument fehlt: ‚Ereignis‘

Hier ist der Code :

from tkinter import * 

window = Tk() 
window.geometry("200x300") 

def evaluate(event): 
    thetext = StringVar() 
    labeloutput = Label(app, textvariable = thetext) 
    n = e.get() 
    thetext.set(n) 
    labeloutput.grid() 

app = Frame(window) 
app.pack() 

e = Entry(window) 
e.pack() 

b= Button(window, text="Return", command=evaluate) 
b.pack() 

window.bind("<Return>", evaluate) 

mainloop() 
+0

@ AndrewL.Bei wenn ich die Eingabetaste ohne das Ereignis in der Funktion drücke, gibt es mir diesen Fehler: "return self.func (* args) TypeError: evaluate() nimmt 0 Positionsargumente aber 1 wurde gegeben" – Vitalynx

Antwort

1

da Sie evaluate als Rückruf binden und Sie es als Schaltfläche Befehl zu verwenden, wenn Sie es in der Taste verwenden Sie einen Lambda verwenden und None auf das Ereignis übergeben. event Argument ist wegen der Bindung erforderlich, aber es gibt kein Ereignis, wenn Sie es von der Schaltfläche klicken, klicken Sie einfach auf None, um den Fehler loszuwerden. Sie können löschen, indem Sie entry.delete(0, 'end') tun.

from tkinter import * 

window = Tk() 
window.geometry("200x300") 

def evaluate(event): 
    thetext = StringVar() 
    labeloutput = Label(app, textvariable = thetext) 
    n = e.get() 
    thetext.set(n) 
    labeloutput.grid() 
    e.delete(0, 'end') # Here we remove text inside the entry 

app = Frame(window) 
app.pack() 

e = Entry(window) 
e.pack() 

b = Button(window, text="Return", command=lambda: evaluate(None)) # Here we have a lambda to pass None to the event 
b.pack() 

window.bind("<Return>", evaluate) 

mainloop() 

Natürlich, wenn Sie die Lambda vor einer Nutzung verhindern möchten, müssen Sie eine Funktion erstellen, müssen Sie den Schlüssel Bindung, und ein separates für die Schaltfläche klicken zu handhaben.

+0

Sie hat mir heute viel geholfen Andrew! Vielen Dank :) – Vitalynx

Verwandte Themen