我遇到以下問題。我試圖將一個lambda函數連接到一個Signal來最終傳遞一些額外的數據。PyQT將λ函數連接到信號
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
當我運行createTimeComboBox(),
我得到這個錯誤:
TypeError: 'int' object is not callable
更改
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),cmd)
到
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),self.test)
工作正常,但我希望能夠通過slotCopy
也是可變的,所以假設我需要使用lambda
方法。
我以前用QPushButton
的clicked()
信號完成了這個工作,並且工作正常。
def createToDoctorButton(self,extraData):
toDoctorButton = QPushButton()
cmd = lambda func=self.goToDoctor:func(extraData)
self.connect(toDoctorButton, SIGNAL('clicked()'),cmd)
return toDoctorButton
def goToDoctor(self,extraData):
print extraData
我希望這是有道理的 - 有沒有人有任何想法?感謝您的任何建議! 乾杯 戴夫
真棒謝謝你,那曾經工作過!謝謝你解釋! –
加上我,你怎麼知道參數被覆蓋? – user1767754
@ user1767754通過信號在Qt中工作。插槽可以具有相同或更少的參數,多餘的參數將被忽略。但其餘的將會通過。無論你是否有該參數的默認值都沒關係。如果一個信號通過一個參數,插槽將會收到它,如果可以的話。 – Avaris