2017-12-23 6 views
-1

私はTKinterで簡単なロギングアプリを書こうとしています。基本的には、エントリと指定した文字列(適切なパス)を比較する必要があります。私はパスワードを入力するたびに残念ながら、「entry.get()」メソッドの結果は、入力をvarries - それは返す印刷:PythonのTKinterでの文字列への変換

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

コード

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.') 

変換するためのいずれかの方法任意のアイデアをそれは望ましい形式のエントリーを「取得する」か?私は似たような話題はほとんど見つけられませんでしたが、この特定の問題には答えなかった

+0

(https://stackoverflow.com/より[、最小完全、かつ検証例]、完全なを提供していないしてくださいヘルプ/ mcve)。 – Nae

+0

'entry_widget.get()'は 'entry_widget.get'と同じではないことに注意してください。 – Nae

+0

'start_window.destroy()'もエラーになります。 'start_window'は' login() 'に関する限り未定義です。 – scrpy

答えて

1

start_window()修正問題の範囲内login()の定義を移動します。 login()にしてent_1(およびstart_windowを)渡す必要、とfunctools.partialを使用する必要はありませんいいえ:

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

その理由は、 'functools.partial'はパラメータを正しく渡しませんでしたか? –

+0

'get'メソッドオブジェクト自体を' login() 'に渡していました。あなたが本当に望むのは、 'login()'を呼び出すボタンが押されたときに 'get()'が呼び出されることです。ですから、これを行う最も簡単な方法は、 'login()'の中に 'get()'呼び出しを置くことです。 'functools.partial'はパラメータを正しく渡していましたが、間違ったパラメータを与えただけです:-) – scrpy

関連する問題