我正在尝试使用pyqt创建一个登录系统,我有多个模块,这是我设置模块下面代码的一部分:
class User(object):
def __init__(self, fname, lname, dob, gender):
self.firstname = fname
self.lastname = lname
self._dob = dob
self.gender = gender
self.type = 'General'
self._username = ''
self._hashkey = ''
def Report(self):
print("Full Name: {0} {1}\nDate of Birth: {2}\nGender: {3}\nAccess Level: {4}".format(self.firstname,self.lastname, self._dob, self.gender, self.type))
print(self._username)
def Genusername(self):
self._username = str(str(self._dob)[:2] + self.firstname[:2] + self.lastname[:2])
saveUsers(users)
def Verify(self, Username, Password):
if Password == self._hashkey:
return True
else:
return False
def verifyUser(Username, Password):
for user in users:
if Username == user._username:
if user.Verify(Username, Password):
print('Login Successful')
else:
print('Wrong Password')
else:
print('User does not exist')
if __name__ == '__main__':
users = []
loadUsers(users)
这是我的pyqt gui模块,这是我试图测试的:
from PyQt4 import QtGui, QtCore
import Settings
class Window(QtGui.QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.lbl1 = QtGui.QLabel('Username')
self.lbl2 = QtGui.QLabel('Password')
self.username = QtGui.QLineEdit()
self.password = QtGui.QLineEdit()
self.okButton = QtGui.QPushButton("OK")
self.okButton.clicked.connect(self.Login)
self.cancelButton = QtGui.QPushButton("Cancel")
grid = QtGui.QGridLayout()
grid.setSpacing(10)
grid.addWidget(self.lbl1, 1, 0)
grid.addWidget(self.username, 1, 1)
grid.addWidget(self.lbl2, 2, 0)
grid.addWidget(self.password, 2, 1)
grid.addWidget(self.okButton, 3, 1)
grid.addWidget(self.cancelButton, 3, 0)
self.setLayout(grid)
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Login')
self.show()
def Login(self):
Settings.verifyUser(self.username.text(),self.password.text())
def main():
app = QtGui.QApplication(sys.argv)
Loginwindow = Window()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
我正在尝试从pyqt编辑小部件获取用户名和密码,并使用用户的用户名和密码验证它们,用户是存储在列表中的所有类,并作为加载的pickle文件转储,我一直得到我的代码的验证功能的名称错误,我不知道如何让列表进入该功能,我尝试了其他方式,但没有工作,如果有另一种方法来构建我的代码或使用pyqt请让我知道,我是PyQt的新手,当谈到使用模块时
Traceback (most recent call last):
File "C:\Users\ProgramA\LoginGUI.py", line 39, in Login
Settings.verifyUser(self.username.text(),self.password.text())
File "C:\Users\ProgramA\Settings.py", line 78, in verifyUser
for user in users:
NameError: name 'users' is not defined
答案 0 :(得分:1)
users
对象在verifyUser
中不作为全局对象或本地对象存在(导入模块时__name__
不是__main__
)。最好是在UI中创建它并将其作为参数传递给verifyUser
:
class Window(QtGui.QWidget):
def __init__(self):
super().__init__()
self.initUI()
self.users = []
...
def Login(self):
Settings.verifyUser(self.username.text(),self.password.text(), self.users)
并在Settings.py
中定义
def verifyUser(Username, Password, users):
答案 1 :(得分:0)
您的users = []
位于if __name__ == "__main__"
,阻止,因此导入设置时不会执行,因此在这种情况下不会存在users
。 (让users
成为首先在设置模块中定义的全局变量可能没有意义。)