2017-01-28 24 views
1
import tkinter as tk 
from tkinter import simpledialog 

def get_pass(): 

    user_password = simpledialog.askstring("Password Entry", "Enter your password here:") 
    return user_password 

submitButton = tk.Button(content, text="Start", command=get_pass) 

#now I want to work with the password that the user entered. 

ユーザは「開始」ボタンをクリックすることになっています。ボタンをクリックすると、ユーザーにパスワードの入力を求めるtkinterメッセージボックスが表示されます。ユーザーはパスワードを入力して送信します。上記のコードによれば、パスワードはuser_passwordという名前の文字列として返されます。ボタンのコマンドの結果をtkinterに保存する方法は?

質問は、ユーザーが入力したものをどのように使用できますか?ボタンは関数の戻り値を保存しません。

+0

'command ='は 'get_pass()'の結果を取得できないので、 'global'変数を使用して' user_password'を割り当てます。 – furas

+0

@furasありがとう、それは意味をなさない。私は初心者ですので、グローバル変数として変数を設定する方法を教えてくれて、その関数の外で使うことができたことに感謝します。 –

+0

私の答えとコードのコメントを参照してください – furas

答えて

1

最初に、submitButton.pack()またはsubmitButton.grid()を追加して、tkウィンドウのボタンを表示する必要があります。パスワードに 'command'を割り当てていないので、user_passwordを返すことはできません。あなたはこのような何かにあなたの機能を変更することができます。

import tkinter as tk 
from tkinter import simpledialog 

def get_pass(): 
    global user_password 
    user_password = simpledialog.askstring("Password Entry", "Enter your password here:") 
    content.destroy() 

content=tk.Tk() 
submitButton = tk.Button(content, text="Start", command=get_pass) 
submitButton.config(height=6, width=25, fg='red') #looks a little nicer 
submitButton.pack() 
content.mainloop() 

#Do stuff with user_password 
#print(user_password) 

あなたはそれがsimpledialogかかわらず、入力されたパスワードが表示されます、後にUSER_PASSWORD印刷するとき。パスワードは現在user_passwordです。

+0

それは動作していないようです。関数を実行した後にprint(user_password)を書くと、pycharmは "NameError:name 'user_password'が定義されていないと答えています。 –

+0

@MauviaModiは完全なコードです。今すぐ使用できます – abccd

1

command=はそうあなたがuser_passwordを割り当てることがglobal変数(またはStringVar)を使用することができますget_pass()から返された値を受け取ることができません。パスワードを確認するにはget_pass()に直接この値を使用してください。返品する必要はありません。

import tkinter as tk 
from tkinter import simpledialog 

def get_pass(): 
    # inform function to use external/global variable when you use `=` 
    global user_password 

    # `user_password_var` is global variable too 
    # but it doesn't need `global user_password_var` 
    # because it doesn't need `=` to assign value. 

    result = simpledialog.askstring("Password Entry", "Enter your password here:") 

    user_password = result 
    # or 
    user_password_var.set(result) 
    # or 
    if result != '123456': 
     label['text'] = "ERROR: password is incorrect" 
    else: 
     label['text'] = "password is OK" 

# --- main --- 

root = tk.Tk() 

# it creates global variable 
user_password = '' 
# or 
user_password_var = tk.StringVar() 

label = tk.Label(root) 
label.pack() 

submitButton = tk.Button(root, text="Start", command=get_pass) 
submitButton.pack() 

# both variables are empty before `mainloop` 

root.mainloop() 

# both variables have value after `mainloop` 

# print after you exit program 
print(user_password) 
print(user_password_var.get()) 
+0

これはユーザーが入力した値ウィンドウを閉じた後にのみ印刷するのですか?ユーザーが「送信」を押すとすぐに値を印刷する方法はありませんか? –

+0

いいえ、 'mainloop'がプログラムを起動し、ボタンをクリックすると' get_pass() 'が実行されることを意味します。 'mainloop'ウィンドウはまだ存在しません。 – furas

+0

'get_pass()'の中に値を表示することはできますが、この関数は 'mainloop()'の前ではなく 'mianloop()'の中で実行されます。 – furas

関連する問題