PyQt5按钮点击调用函数报错:TypeError: native Qt signal is not callable
解决PyQt5中
TypeError: native Qt signal is not callable错误 我一眼就看到你代码里的问题了,问题出在按钮点击事件的绑定方式上,咱们一步步拆解:
错误根源
你写了这一行代码:
self.Button.clicked(self.BtnClicked())
这犯了两个PyQt信号槽绑定的典型错误:
clicked是PyQt的原生信号,不是普通可调用函数,不能直接像调用普通函数那样传参数执行;self.BtnClicked()是直接调用了这个函数,把它的返回值(这里是None)传给了clicked,完全不符合信号与槽的绑定逻辑。
修正方案
正确的做法是用connect()方法把信号和槽函数绑定起来,而且要传递函数对象(注意不要加括号),把那行错误代码改成:
self.Button.clicked.connect(self.BtnClicked)
完整可运行的修正代码
我还给你补全了缺失的导入语句,以及规范的脚本入口判断:
import sys from PyQt5 import QtWidgets from PyQt5.QtWidgets import QMainWindow, QApplication class MyFirstWindow(QMainWindow): def __init__(self): self.Label = None self.Button = None super(MyFirstWindow, self).__init__() self.setGeometry(200, 200, 500, 500) self.setWindowTitle("My First Window GUI Application") self.ShowWidgets() def ShowWidgets(self): try: self.Label = QtWidgets.QLabel(self) self.Button = QtWidgets.QPushButton(self) self.Label.setText("My Name is Umair!") self.Label.move(170,70) self.Button.setText("Click Here") self.Button.move(160,30) # 修正后的信号槽绑定 self.Button.clicked.connect(self.BtnClicked) except Exception as e: print(str(e)) def BtnClicked(self): self.Label.setText("Label Text is Changed") def ShowWindow(): app = QApplication(sys.argv) win = MyFirstWindow() win.show() sys.exit(app.exec_()) if __name__ == "__main__": ShowWindow()
额外小技巧
如果你的槽函数需要传递自定义参数,可以用lambda表达式来实现,比如:
# 绑定带参数的槽函数 self.Button.clicked.connect(lambda: self.BtnClicked("点击后修改的文本")) # 对应的槽函数修改为接受参数的形式 def BtnClicked(self, new_text): self.Label.setText(new_text)
内容的提问来源于stack exchange,提问作者Umair Mubeen
相关产品推荐
相关产品推荐

