Python:TypeError:参数1具有意外的类型'NoneType'(PyQt5)[重复]

问题描述 投票:-1回答:1

我想做一个简单的密码生成器,作为我的第一个Python项目之一。它的CLI版本工作正常,现在我将使用PyQt5构建GUI。现在,我连接到按钮的方法出现了问题。它给我一个错误消息,称为

TypeError:参数1具有意外的类型'NoneType

这是我的代码:

from PyQt5 import QtCore, QtGui, QtWidgets

从def_global导入密码

类Ui_mainWindow(object):

def setupUi(self, mainWindow):

    # define the variables

    self.letters = "n"
    self.digits = "n"
    self.punctuation = "n"

    mainWindow.setObjectName("mainWindow")
    mainWindow.resize(652, 422)
    self.centralwidget = QtWidgets.QWidget(mainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.label_top = QtWidgets.QLabel(self.centralwidget)
    self.label_top.setGeometry(QtCore.QRect(10, 20, 161, 16))
    self.label_top.setObjectName("label_top")
    self.spin_box_num = QtWidgets.QSpinBox(self.centralwidget)
    self.spin_box_num.setGeometry(QtCore.QRect(10, 240, 51, 32))
    self.spin_box_num.setMinimum(1)
    self.spin_box_num.setProperty("value", 10)
    self.spin_box_num.setObjectName("spin_box_num")
    self.check_letters = QtWidgets.QCheckBox(self.centralwidget)
    self.check_letters.setGeometry(QtCore.QRect(10, 100, 111, 22))
    self.check_letters.setObjectName("check_letters")
    self.check_digits = QtWidgets.QCheckBox(self.centralwidget)
    self.check_digits.setGeometry(QtCore.QRect(10, 130, 101, 22))
    self.check_digits.setObjectName("check_digits")
    self.check_punctuation = QtWidgets.QCheckBox(self.centralwidget)
    self.check_punctuation.setGeometry(QtCore.QRect(10, 160, 111, 22))
    self.check_punctuation.setObjectName("check_punctuation")
    self.label_num_chars = QtWidgets.QLabel(self.centralwidget)
    self.label_num_chars.setGeometry(QtCore.QRect(10, 210, 151, 20))
    self.label_num_chars.setObjectName("label_num_chars")
    self.btn_create = QtWidgets.QPushButton(self.centralwidget)
    self.btn_create.setGeometry(QtCore.QRect(550, 360, 88, 34))
    self.btn_create.setObjectName("btn_create")
    self.label_sel_chars = QtWidgets.QLabel(self.centralwidget)
    self.label_sel_chars.setGeometry(QtCore.QRect(10, 60, 311, 18))
    self.label_sel_chars.setAcceptDrops(False)
    self.label_sel_chars.setObjectName("label_sel_chars")
    self.label_password = QtWidgets.QLabel(self.centralwidget)
    self.label_password.setGeometry(QtCore.QRect(10, 310, 621, 18))
    self.label_password.setText("")
    self.label_password.setObjectName("label_password")
    mainWindow.setCentralWidget(self.centralwidget)
    self.statusbar = QtWidgets.QStatusBar(mainWindow)
    self.statusbar.setObjectName("statusbar")
    mainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(mainWindow)
    QtCore.QMetaObject.connectSlotsByName(mainWindow)

    if self.check_letters.isChecked():
        self.letters = "y"

    if self.check_letters.isChecked():
        self.digits = "y"

    if self.check_punctuation.isChecked():
        self.punctuation = "y"


    self.btn_create.clicked.connect(self.create_password(self.spin_box_num.value, self.letters, self.digits, self.punctuation))


def retranslateUi(self, mainWindow):

    _translate = QtCore.QCoreApplication.translate
    mainWindow.setWindowTitle(_translate("mainWindow", "Password Generator"))
    self.label_top.setText(_translate("mainWindow", "Create a new passoword."))
    self.check_letters.setText(_translate("mainWindow", "Letters"))
    self.check_digits.setText(_translate("mainWindow", "Digits"))
    self.check_punctuation.setText(_translate("mainWindow", "Punctuation"))
    self.label_num_chars.setText(_translate("mainWindow", "Number of characters:"))
    self.btn_create.setText(_translate("mainWindow", "Create"))
    self.label_sel_chars.setText(_translate("mainWindow", "Select the characters the password should contain."))


def create_password(self, char_num:int=10, letters:str="n", digits:str="n", punctuation:str="n"):
    """Creates the password"""
    password = Password(char_num, letters, digits, punctuation)
    print(password)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = Ui_mainWindow()
    ui.setupUi(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())

我尝试运行它时显示以下错误消息:

Traceback (most recent call last):
File "/home/paul/Dev/Python/Projekte/password-generator/neu/main_win.py", line 104, in <module>
ui.setupUi(mainWindow)
File "/home/paul/Dev/Python/Projekte/password-generator/neu/main_win.py", line 77, in setupUi
self.btn_create.clicked.connect(self.create_password(self.spin_box_num.value, self.letters,  
self.digits, self.punctuation))
TypeError: argument 1 has unexpected type 'NoneType'
python pyqt pyqt5 nonetype
1个回答
0
投票

connect方法期望可调用对象作为参数。在这里,您传递的是返回的create_password值(即None)。

使用触发clicked时将被调用的lambda:

    self.btn_create.clicked.connect(lambda _: create_password(self, 10, "n", "n", "n"))
© www.soinside.com 2019 - 2024. All rights reserved.