Tôi đang mắc kẹt với vấn đề sau. Tôi đang cố gắng để kết nối một chức năng lambda với một tín hiệu cho đi qua một số dữ liệu phụ cuối cùng.PyQT Kết nối hàm lambda với 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
Khi tôi chạy createTimeComboBox(),
tôi nhận được lỗi này:
TypeError: 'int' object is not callable
Thay đổi
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),cmd)
để
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),self.test)
hoạt động tốt, nhưng tôi muốn để có thể vượt qua số slotCopy
cũng thay đổi, vì vậy giả sử rằng tôi cần sử dụng phương pháp lambda
.
Tôi đã thực hiện việc này trước đây với tín hiệu clicked()
của và hoạt động tốt.
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
Tôi hy vọng điều này có ý nghĩa - có ai có ý tưởng nào không? Cảm ơn mọi lời đề nghị! Cheers Dave
Tuyệt vời cảm ơn bạn, đã làm việc một điều trị! Cảm ơn bạn đã giải thích điều đó! –
Cộng với tôi, làm cách nào bạn biết Thông số bị ghi đè? – user1767754
@ user1767754 bằng cách tín hiệu hoạt động trong Qt. Các khe có thể có cùng hoặc ít đối số hơn và các đối số bổ sung sẽ bị bỏ qua. Nhưng những cái còn lại sẽ được thông qua. Nó không quan trọng nếu bạn có một mặc định cho đối số đó hay không. Nếu một tín hiệu vượt qua một đối số, khe sẽ nhận được nó nếu nó có thể. – Avaris