2017-12-23 2 views
-1

Ich versuche, eine einfache Logging-App in TKinter schreiben. Grundsätzlich muss ich einen Eintrag mit einer gegebenen Zeichenfolge vergleichen (richtiger Durchlauf). Leider, wenn ich das Kennwort ein, um das Ergebnis der „entry.get()“ Methode varries die Eingabe - Druck kehrt:Konvertieren von Eintrag in Zeichenfolge in Python TKinter

<bound method Entry.get of <tkinter.Entry object .!entry>> 

Der Code

def start_page(): 
    start_window = Tk() 
    ent_1 = Entry(start_window) 
    but_1 = Button(start_window, text='Login', command=partial(login, ent_1.get)) 
    but_1.grid(row=1,column=1) 
    ent_1.grid(row=0, column=1) 
    start_window.mainloop() 

def login(input_password): 
    correct_password = 'password' 
    if correct_password == input_password: 
     coefficient_calc() 
     start_window.destroy() 
    else: 
     print('You typed:', input_password) 
     print('Please type the correct password.') 

Jede Idee, wie man entweder konvertieren oder den Eintrag in einer gewünschten Form "holen"? Ich fand nur wenige ähnliche Themen, aber keine Antwort auf dieses spezielle Thema.

+0

Bitte geben Sie eine vollständigere, [Minimal, vollständig und prüfbare Beispiel] (https://stackoverflow.com/ Hilfe/mcve). – Nae

+0

Beachten Sie, dass 'entry_widget.get() 'nicht dasselbe ist wie' entry_widget.get '. – Nae

+0

Beachten Sie, dass 'start_window.destroy()' auch zu einem Fehler führen wird, da 'start_window' nicht definiert ist, soweit 'login() 'betroffen ist. – scrpy

Antwort

1

Das Verschieben der Definition von login() in den Bereich start_window() behebt das Problem. Keine Notwendigkeit zu passieren ent_1 (und start_window) um login(), und keine Notwendigkeit functools.partial verwenden:

def start_page(): 
    def login(): 
     input_password = ent_1.get() 
     correct_password = 'password' 
     if correct_password == input_password: 
      coefficient_calc() 
      start_window.destroy() 
     else: 
      print('You typed:', input_password) 
      print('Please type the correct password.') 

    start_window = Tk() 
    ent_1 = Entry(start_window) 
    but_1 = Button(start_window, text='Login', command=login) 
    but_1.grid(row=1,column=1) 
    ent_1.grid(row=0, column=1) 
    start_window.mainloop() 
+0

Also der Grund war 'functools.partial' nicht die Parameter korrekt übergeben? –

+0

Sie haben das 'get'-Objekt selbst an' login() 'übergeben. Was Sie wirklich wollen, ist der Aufruf von 'get()', wenn die Taste gedrückt wird und 'login()' aufgerufen wird. Also ist der einfachste Weg dies zu tun, den 'get()' Aufruf in 'login()' zu setzen. 'functools.partial' hat die Parameter korrekt übergeben, Sie haben nur die falschen Parameter angegeben :-) – scrpy

Verwandte Themen