2016-11-24 2 views
0

私のコードはこのように見えますが、グローバルユーザー名とグローバルパスワードは、ユーザー名/パスワードを印刷する代わりに、 ".41238472L"と同様のものを印刷すると考えました。これをどうやって解決するのですか?ありがとうPython、Tkinterのログインボックス。ユーザー名とパスワードをグローバルにすることができません。

from Tkinter import * 

global username 
global password 
root = Tk() 

def getName(): 
    root.destroy() 

userLabel = Label(root, text="Enter Username") 
username = Entry(root, bd=5) 
pwLabel = Label(root, text="Enter Password") 
password = Entry(root, bd=5, show ='*') 
submit = Button(root, text ="Submit", command = getName) 

userLabel.pack() 
username.pack() 
pwLabel.pack() 
password.pack() 
submit.pack(side = BOTTOM) 
root.mainloop() 

print username 
print password 
+0

'global'はグローバル変数を作成しません - ' username = some_value'それをします。 'global'はocal変数を作成するのではなく、外部/グローバル変数を使用するよう関数に通知するために使用されます。 – furas

+1

root.mainloop()の後にユーザー名とパスワードの値を使用できる方法はありますか?ありがとう – darrenvba

+0

@Lafexlofは 'username'は' Entry'インスタンスであり、 'username.get()'を使用しなければならないと言っています。もし 'mainloop()'の後にこの値が必要な場合は、通常の変数 'var_username = username.get()'を 'getName()'に代入する必要があります。 – furas

答えて

2

ウィジェットには親が存在する必要があります。変数がウィジェットインスタンスを保持していても、そのウィジェットの親が破棄された場合、そのメソッドを使用することはできません。だから、あなたはrootを破壊した後、内容の項目を得ることができません。 しかしあなたはです。StringVarからEntryにバインドし、StringVarの内容を取得します。

from Tkinter import * 

root = Tk()  
nameVar = StringVar() 
passVar = StringVar() 

def getName(): 
    root.destroy() 

userLabel = Label(root, text="Enter Username") 
username = Entry(root, bd=5, textvariable=nameVar) 
pwLabel = Label(root, text="Enter Password") 
password = Entry(root, bd=5, textvariable=passVar, show ='*') 
submit = Button(root, text ="Submit", command = getName) 

userLabel.pack() 
username.pack() 
pwLabel.pack() 
password.pack() 
submit.pack(side = BOTTOM) 
root.mainloop() 

print nameVar.get() 
print passVar.get() 
+0

残念ながら、.get() root.mainloop()の前に。表示されるエラーは、TclError:無効なコマンド名です。 ".41238472L" – darrenvba

+0

更新いただきありがとうございます。 – darrenvba

1

変数名を変更する必要があるので、2つの異なるものに同じ名前を使用する必要があります。そして、エントリから変数にテキストをコピーすることができます。

import Tkinter as tk 

# --- functions --- 

def get_name(): 
    # inform function to use global variables instead of local one 
    global username 
    global password 

    # copy values 
    username = entry_username.get() 
    password = entry_password.get() 

    root.destroy() 

# --- main --- 

# global variable 

username = None 
password = None 

# GUI 

root = tk.Tk() 

label_username = tk.Label(root, text="Enter Username") 
entry_username = tk.Entry(root, bd=5) 
label_password = tk.Label(root, text="Enter Password") 
entry_password = tk.Entry(root, bd=5, show='*') 
submit = tk.Button(root, text="Submit", command=get_name) 

label_username.pack() 
entry_username.pack() 
label_password.pack() 
entry_password.pack() 
submit.pack(side=tk.BOTTOM) 

root.mainloop() 

# result 

print username 
print password 
関連する問題