PyQt, Pyside2 Почему слот работает, подключенный через лямбду, а не при прямом подключении? - PullRequest
0 голосов
/ 19 апреля 2020

Я не понимаю, почему иногда подключение к сигналам не работает напрямую с помощью метода объекта. Он начинает работать, когда я даю лямбду с помощью этого метода.

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

Если я преобразую первое соединение с лямбда-выражением, или просто закомментирую последнее Линия когда-либо работает нормально:

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
...