2014-12-31 32 views
0

我试图使用PyQt的创建一个登录系统,我有多个模块,这里是我的从我的设置模块下面的代码部分:名称错误,同时使用多个模块和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文件转储,我不断收到一个nam我的代码的验证功能错误,我不知道如何获得列表进入功能,我尝试了其他方式,但不工作,如果有另一种方法来构建我的代码或使用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

users = []if __name__ == "__main__",块内,所以,当你输入的设置也不会被执行,因此users不会在这种情况下存在。 (users可能是首先在设置模块中定义的全局变量,这可能没有意义。)

1

users对象不存在作为全局或作为本地verifyUser(当一个模块是进口的__name__不是__main__)。最好是在用户界面来创建它,并将它传递的参数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): 
+0

我还有一个问题,但我不能在这里键入它,它太长大声笑,电子邮件? – Inthuson

+2

只是把它张贴在SO! – Schollii

相关问题