2016-11-24 127 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'來通知函數使用external/global變量而不是創建ocal變量。 – furas

+1

有沒有辦法可以在root.mainloop()之後使用用戶名和密碼值?謝謝 – darrenvba

+0

作爲@Lafexlof表示'username'是'Entry'實例,您必須使用'username.get()'。如果你在'mainloop()'後需要這個值,那麼你必須分配給普通變量'var_username = username.get()' - 例如在'getName()' – furas

回答

2

窗口小部件需要父窗體存在。即使一個變量持有一個小部件實例,如果該小部件的父代被銷燬了,你也不能使用它的方法。因此,在銷燬root後,您無法獲取內容條目。 但是可以綁定StringVarEntry並獲得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

您必須更改變量名稱,因爲現在您對兩個不同的東西使用相同的名稱。然後您可以將文本從條目複製到變量。

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 
相關問題