2016-11-24 128 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 
相关问题