PySide2的QPushButton使用sender()后找不到对象

因为需要对未知数量的按钮绑定点击事件触发的函数,同时需要每个按钮需要传入不同的参数好区分点击的是哪一个,所以使用了sender()。代码如下

new_button_widget = QPushButton(self.log_widget)
new_button_widget.clicked.connect(lambda:self.testfunc(new_button_widget.sender().objectName()))

这段代码在PyQt5下可以运行,由于工作需要我将它换成了PySide2,于是出现了上面的问题

报错信息如下:

PySide2的QPushButton使用sender()后找不到对象

目前只测出将sender()去掉后程序无报错但是按钮传递的参数全部都变成一样
经过测试发现按钮对象调用sender()之后对象类型变为NoneType,但不知道具体原因和结局办法

讨论数量: 2

请问楼主解决了这个问题吗?我现在也遇到了这个问题,百思不得其解

2年前 评论
Jason990420

下面这个 lambda 函数中的 new_button_widget 并不是这时候的 new_button_widget, 而是事件发生时的 new_button_widget, 这个问题在 Python 中常常会出错.

new_button_widget = QPushButton(self.log_widget)
new_button_widget.clicked.connect(
    lambda:self.testfunc(new_button_widget.sender().objectName()))

一般都是使用预设参数值来处理

new_button_widget = QPushButton(self.log_widget)
new_button_widget.clicked.connect(
    lambda widget=new_button_widget:self.testfunc(widget.sender().objectName()))
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!