Python 简单登录页面程序在Tkinter中产生属性错误
所以,我正在使用tkinter开发一个简单的登录页面程序。基本上,它所做的只是检查给定的用户名和密码是否与常规python字典中的条目匹配。但是,当我尝试单击登录按钮时,会出现如下错误:Python 简单登录页面程序在Tkinter中产生属性错误,python,tkinter,Python,Tkinter,所以,我正在使用tkinter开发一个简单的登录页面程序。基本上,它所做的只是检查给定的用户名和密码是否与常规python字典中的条目匹配。但是,当我尝试单击登录按钮时,会出现如下错误: File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1705, in __call__ return self.func(*args)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "LoginRegister.py", line 26, in login
if username_entry_login.get() in database:
AttributeError: 'NoneType' object has no attribute 'get'
这是我的密码:
from tkinter import *
root = Tk()
database = {
"Username" : "123"
}
# Creating the login page
def login_page():
global username_entry_login
global password_entry_login
login_screen = Tk()
login_screen.title("Login")
Label(login_screen, text="Username:").pack()
username_entry_login = Entry(login_screen).pack()
Label(login_screen, text="Password:").pack()
password_entry_login = Entry(login_screen, show="*").pack()
Button(login_screen, text="Login", command=login).pack()
access_label = Label(login_screen, text="").pack()
# Creating the function for the login button
def login():
if username_entry_login.get() in database:
if database[username_entry_login.get()] == password_entry_login.get():
access_label.config(text="Access Granted")
else:
access_label.config(text="Access Denied")
else:
access_label.config(text="Access Denied")
# Creating the main page
Button(text="Login", command=login_page).pack()
root.mainloop()
如何避免此错误?出现此错误的原因是在输入框上调用了.pack方法,结果存储在没有.get方法的username\u Entry\u login中。您可以将.pack与小部件的创建分开,也可以使用称为[]的特殊文本小部件 选项1-将.pack方法与条目小部件的初始化分离 比如:
username_entry_login = Entry(login_screen)
username_entry_login.pack()
username_entry_login.get() # returns the the contents of the username entry box
username_strvar = StringVar()
Entry(login_screen, textvariable=username_strvar).pack()
选项2-字符串变量
比如:
username_entry_login = Entry(login_screen)
username_entry_login.pack()
username_entry_login.get() # returns the the contents of the username entry box
username_strvar = StringVar()
Entry(login_screen, textvariable=username_strvar).pack()
然后,您可以获取字符串变量的值,该值将作为字符串返回,即输入框的内容
因此:
是用户名\输入\登录一个字符串变量Tkinter输入小部件具有get函数。问题是username\u entry\u login是pack username\u entry\u login=Entrylogin\u screen.pack的结果,它不是entry的一个实例。哦,我的糟糕,修复了postah,明白了!非常感谢你!对于选项2,您不需要变量username\u entry\u login,因为它也是None。