2016-05-04 2 views
0

Ich habe eine folgende Art von Code, wo ich Abfrage-Schaltfläche verschwinden soll, wenn das Eingabefeld leer ist. Aber das passiert nicht. Wenn ich versuchte, den Eingabewert beim Drücken einer beliebigen Taste zu drucken, wird der letzte Wert angezeigt, nicht der aktuelle Wert.Validieren Befehl funktioniert nicht wie erwartet in Tkinter Eintrag Widget

z. Wenn "Test" der vorherige Wert in Pin ist, wird beim Drücken der Rücktaste pin.get() Test anstelle von "Tes" angezeigt. Ich bin neu bei Python und Tkinter, also weiß nicht, was für eine dumme Sache ich mache.

def send_button(): 
    print pin.get() 
    if pin.get() == "": 
     print "in if" 
     query.place_forget() 
    else: 
     query.place(relx=0.0, rely=0.75, relwidth=0.2, relheight=0.15) 
    return TRUE 
#Entry box 
pin = StringVar() 
ent1 = Entry(top, textvariable = pin, validate = 'key', vcmd = send_button) 

#Query button 
query = Button (top, command = get_temp, text = 'Query') 
top.mainloop() 
+0

Eine Sache, stellte fest, dass „ist“ anstelle von „==“ für String Match-Code in der Schleife, wenn über die Verwendung wird. Aber wieder, es läuft ein Zeichen zurück. Und am Ende, wenn der Eintrag leer ist, geht es nicht in die Funktion send_button. Danach, wenn Sie ein beliebiges Zeichen eingeben, verschwindet die Abfrage-Schaltfläche und wird angezeigt, nachdem Sie das zweite Zeichen eingegeben haben – Dcode

Antwort

0

Validierung passiert vor das Zeichen in der Widget eingesetzt ist. Das ist der ganze Zweck: zu entscheiden, ob der Schnitt erlaubt sein soll oder nicht. Es kann nicht bewirkt werden, dass diese Entscheidung des Textes bereits eingegeben (oder gelöscht) wurde.

Die Eingabeüberprüfung hat eine Möglichkeit, den Wert des Textes vor der Eingabe, nach der Eingabe, dem einzufügenden oder gelöschten Text und mehreren anderen Informationen einzugeben.

Sehen Sie diese Antwort für ein umfassendes Beispiel:

https://stackoverflow.com/a/4140988/7432