首页 > 解决方案 > PyQt,Pyside2 为什么插槽通过 lambda 连接工作,而直接连接时不工作?

问题描述

我不明白为什么有时直接使用对象方法无法连接到信号。当我用这种方法给 lambda 时,它开始工作。

class MainWindowTrans:
    def __init__(self, window: QMainWindow):
        self.window = window

        self.asset: QComboBox = self.window.findChild(QComboBox, 'asset')

        self.asset.currentIndexChanged.connect(self.onOne)
        self.asset.currentIndexChanged.connect(self.onTwo)
        self.asset.currentIndexChanged.connect(onThree)
        # self.asset.currentIndexChanged.connect(lambda : self.onOne())
        self.asset.dumpObjectInfo()

    def onOne(self):
        print('on1')

    @staticmethod
    def onTwo():
        print('on2')

def onThree():
    print('on3')

输出:

OBJECT QComboBox::asset
  SIGNALS OUT
        signal: currentIndexChanged(int)
          --> __GlobalReceiver__::unnamed onOne7f72b8ecab507f72e1dc0050()
          --> __GlobalReceiver__::unnamed onTwo7f72e1dc05f0()
          --> __GlobalReceiver__::unnamed onThree7f72e1f273b0()


on2
on3

如果我将第一个连接转换为 lambda 表达式,或者只是取消注释最后一行,一切正常:

OBJECT QComboBox::asset
  SIGNALS OUT
        signal: currentIndexChanged(int)
          --> __GlobalReceiver__::unnamed onOne7fb8481a2a507fb8538140e0()
          --> __GlobalReceiver__::unnamed onTwo7fb853814680()
          --> __GlobalReceiver__::unnamed onThree7fb85397d3b0()
          --> __GlobalReceiver__::unnamed <lambda>7fb848140c20()
Output:
on1
on2
on3
on1

标签: pythonqtpyqtpysidepyside2

解决方案


推荐阅读