PyQt5无参函数绑定报错:参数1意外为NoneType类型
PyQt5信号连接报错:TypeError: argument 1 has unexpected type 'NoneType'
错误根源
你代码里的核心问题出在mainWindow类的do_something方法中:
self.functionX = self.widgetX.functionX()
这里的()会立即执行functionX方法,而ClassX的functionX没有返回值(默认返回None),导致self.functionX被赋值为None。当你用self.button_widget.clicked.connect(self.functionX)连接信号时,传入的参数是None,不符合信号连接要求的可调用对象,因此抛出类型错误。
修正方法
去掉functionX后面的括号,直接引用函数对象(而不是执行它):
self.functionX = self.widgetX.functionX
完整修正后的代码
from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import sys class mainWindow(QWidget): def __init__(self): super(mainWindow, self).__init__() self.title = 'Window Title' self.left = 100 self.top = 100 self.width = 750 self.height = 500 self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) self.do_something() self.button_widget = QPushButton("点击修改文本") self.layout = QGridLayout() self.layout.addWidget(self.button_widget, 0, 0) self.layout.addWidget(self.widgetX, 1, 0, 1, 3) # row, col, row_span, col_span self.setLayout(self.layout) self.button_widget.clicked.connect(self.functionX) def do_something(self): self.widgetX = ClassX() # 去掉括号,引用函数对象而非执行函数 self.functionX = self.widgetX.functionX self.variableX = self.widgetX.variableX class ClassX(QLabel): def __init__(self): super(ClassX, self).__init__() self.setFixedHeight(40) self.setMinimumWidth(600) self.setText('I am a Custom QLabel') self.variableX = 'X' def functionX(self): self.setText('I can change text') if __name__ == '__main__': app = QApplication(sys.argv) ex = mainWindow() ex.show() sys.exit(app.exec_())
小提示:给按钮添加文本(比如QPushButton("点击修改文本")),能更直观地测试功能。
内容的提问来源于stack exchange,提问作者astrobagel
相关产品推荐
相关产品推荐

