Utknąłem z następującym problemem. Próbuję połączyć funkcję lambda z sygnałem, aby ostatecznie przekazać dodatkowe dane.PyQT Łączenie funkcji lambda z Signal
def createTimeComboBox(self,slotCopy):
timeComboBox = QComboBox()
#...
cmd = lambda func=self.test:func()
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),cmd)
#...
def test(self, value):
print value
Kiedy biegnę createTimeComboBox(),
otrzymuję ten błąd:
TypeError: 'int' object is not callable
Zmiana
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),cmd)
do
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),self.test)
działa prawidłowo, ale chciałbym, aby móc przekazać slotCopy
zmienna również, więc zakładałem, że muszę użyć podejścia lambda
.
Zrobiłem to wcześniej z sygnałem QPushButton
's clicked()
i to działało dobrze.
Mam nadzieję, że to ma sens - czy ktoś ma jakieś pomysły? Dzięki za wszelkie sugestie! Cheers Dave
Niesamowite dziękuję, to działało! Dzięki za wyjaśnienie tego! –
Plus od mnie, skąd wiedziałeś, że parametr został nadpisany? – user1767754
@ user1767754 przy okazji sygnały działają w Qt. Sloty mogą mieć te same lub mniej argumentów, a dodatkowe będą ignorowane. Ale pozostałe zostaną przekazane. Nie ma znaczenia, czy masz domyślny argument, czy nie. Jeśli sygnał przejdzie przez argument, slot otrzyma go, jeśli będzie mógł. – Avaris