【问题标题】:Name error while using Multiple modules and Pyqt使用多个模块和 Pyqt 时出现名称错误
【发布时间】:2015-02-27 20:19:45
【问题描述】:

我正在尝试使用 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 编辑小部件获取用户名和密码,并使用用户名和密码验证它们,用户都是存储在列表中并转储为加载的泡菜文件的所有类,我的代码的验证函数不断出现名称错误,我不知道如何让列表进入函数,我尝试了其他方法但没有工作,如果有另一种方法来构建我的代码或使用 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

【问题讨论】:

    标签: python multithreading module pyqt pyqt4


    【解决方案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):
    

    【讨论】:

    • 我还有一个问题,但我不能在这里输入,它太长了大声笑,电子邮件?
    【解决方案2】:

    您的users = [] 位于if __name__ == "__main__" 块内,因此在您导入设置时不会执行它,因此在这种情况下users 将不存在。 (首先让 users 成为设置模块中定义的全局变量可能没有意义。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2020-02-10
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多