使用lambda表達式連接pyqt中的插槽我正在嘗試使用lambda函數連接插槽,但它沒有按照我期望的方式工作。在下面的代碼中,我成功正確連接前兩個按鈕。對于我在循環中連接的后兩個,這是錯誤的。在我之前有人有同樣的問題,但這個解決方案對我不起作用。我一直盯著我的屏幕半小時,但我無法弄清楚我的代碼是如何不同的。class MainWindow(QtGui.QWidget):
def __init__(self):
super(QtGui.QWidget, self).__init__()
main_layout = QtGui.QVBoxLayout(self)
# Works:
self.button_1 = QtGui.QPushButton('Button 1 manual', self)
self.button_2 = QtGui.QPushButton('Button 2 manual', self)
main_layout.addWidget(self.button_1)
main_layout.addWidget(self.button_2)
self.button_1.clicked.connect(lambda x:self.button_pushed(1))
self.button_2.clicked.connect(lambda x:self.button_pushed(2))
# Doesn't work:
self.buttons = []
for idx in [3, 4]:
button = QtGui.QPushButton('Button {} auto'.format(idx), self)
button.clicked.connect(lambda x=idx: self.button_pushed(x))
self.buttons.append(button)
main_layout.addWidget(button)
def button_pushed(self, num):
print 'Pushed button {}'.format(num)按下前兩個按鈕會產生'Pushing button 1'和'Pushing button 2',另外兩個按鈕都會產生'Pushed button False',雖然我預計會有3和4。我還沒有完全理解lambda機制。究竟有什么聯系?指向由lambda生成的函數的指針(使用參數替換)或者是在信號觸發時評估的lambda函數?
使用lambda表達式連接pyqt中的插槽
幕布斯6054654
2019-08-19 16:40:04