2016-07-02 15 views
0

Zunächst entschuldige ich mich, dass ich OOP nicht benutzt habe. Ich habe mich einfach entschieden, die Komplexität für solch ein kleines Programm zu vermeiden. Also hier ist mein Programm (im Grunde ist es ein Eintrag Widget, das einen Text ermöglicht, die der ganzen Zahlen bestehen nur maximale Länge beträgt 5):Ähnliche Validierungsfunktionen funktionieren nicht

from tkinter import * 
root = Tk() 
root.title("Entry Validation") 
root.geometry("300x100") 

def validation_function(text): 
    if len(text) <= 5: 
     try: 
      text = int(text) 
      return True 
     except: 
      return False 
    else: 
     return False 

vcmd = root.register(validation_function) 
entry = Entry(root, validate='key', validatecommand=(vcmd, "%P")) 
entry.pack() 

Es funktioniert normal. Aber wenn ich eine kleine Änderung in den Körper der Validierungsfunktion machen, funktioniert es nicht:

def validation_function(text): 
    try: 
     text = int(text) 
     if len(text) <= 5: 
      return True 
     else: 
      return False 
    except: 
     return False 

Ich fühle mich ist das Problem hier:

except: 
    return False 

Wahrscheinlich ist die maximale Länge Teil nicht gehen Sie gut mit Versuch-außer ... Jedoch:

def validation_function(text): 
    try: 
     if len(text) <= 5: 
      return True 
     else: 
      return False 
    except: 
     return False 

funktioniert richtig. Aber es gibt nur die maximale Länge, ich will auch, dass es nur ganze Zahlen erlaubt. Ich habe es im ersten Beispiel gemacht, aber meine Frage ist: Warum funktioniert es nicht, wenn ich die Stellen des Maximallängenteils mit dem einzigen Ganzzahlenteil ändere?

+0

Bitte nicht meine Fragen ohne zu erklären, downvote den Grund erhöhen wird! Es beschränkt meine Privilegien. Ich bin nur neu hier, Jungs, komm schon! –

Antwort

3

text ist ein int ... Sie len(int) nicht nennen kann ... es eine Ausnahme

versuchen diese

def validation_function(text): 
    try: 
     int(text) 
    except: 
     return False 
    if len(text) <= 5: 
     return True 
    return False 
+0

Das stimmt! Es löst normalerweise einen TypeError und in diesem Fall eine Ausnahme aus. Ich musste darauf achten ... Danke! –

+0

Entschuldigung, noch eine Frage dazu: Warum habe ich Probleme, wenn ich versuche, den Eintragstext zu löschen? Ich verwende sogar eine klare Funktion, die an das Eingabe-Widget gebunden ist. Wenn ich also auf den Eingabebereich klicke, muss er gelöscht werden. Ich habe auch eine klare Schaltfläche hinzugefügt, um den Eingabetext nach dem Klicken auf die Schaltfläche zu entfernen, aber keiner von beiden funktioniert. Gibt es eine Möglichkeit, es zu beheben? Ich habe viele Wege ausprobiert, aber keiner von ihnen hat geklappt. –

+0

Gelöst mit: wenn nicht Text: Keine Rückgabe True –