pyqt 连接到 functools.partail 传递信号值



当将参数连接到 GUI Qt 信号时,我在使用 functools.partial() 将参数传递给函数时遇到了一些问题(log_this(( 是一个虚拟函数只是为了传达问题(:

self.ui.comboBox_1.currentIndexChanged.connect(functools.partial(self.log_this, val='aaaaaa'))
def log_this(self, val='0000'):
    log.info(val)

出现错误:

类型错误:log_this(( 为参数 'val' 获取了多个值

如果我使用 lambda 调用函数,它可以正常工作:

self.ui.comboBox_1.currentIndexChanged.connect(lambda: self.log_this(val='aaaaaa'))

研究一下,我看到log_this()正在获取当前的 comboBox 索引。我也尝试使用位置参数,也得到了像上面这样的错误。

我想了解使用 functools.partial(( 是否正确,或者在这种情况下我应该坚持使用 lambda。 如果正确,正确的方法是什么?

添加更多详细信息:

我的班级:

class AppMainWindow(QtGui.QMainWindow):
    message = QtCore.Signal(str)
    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.manual_test = True
        self.all_tests_enabled = False
        self.set_connections()
    def set_connections(self): 
        self.ui.comboBox_1.currentIndexChanged.connect(
            functools.partial(self.log_this, val='aaaaaa'))
        self.ui.pushButton_1.clicked.connect(self.add_item)
    def log_this(self, val='0000'):
        log.info(val)

我正在使用 PySide 1.2.2。

提前感谢!

发生这种情况是因为currentIndexChanged发出一个值(可能是新索引(,您的方法val该值。您在这里有多种选择:

  • 将其连接到类似lambda _idx: self.log_this('aaaaaa')
  • 使用 currentIndexChanged[()].connect(...) 获取没有参数的信号版本 - 这应该适用于 PyQt5,我不知道 PySide。
  • val之前将位置参数(如 _idx(添加到log_this

相关内容

  • 没有找到相关文章

最新更新