使用lambda表達(dá)式連接pyqt中的插槽我正在嘗試使用lambda函數(shù)連接插槽,但它沒有按照我期望的方式工作。在下面的代碼中,我成功正確連接前兩個(gè)按鈕。對(duì)于我在循環(huán)中連接的后兩個(gè),這是錯(cuò)誤的。在我之前有人有同樣的問題,但這個(gè)解決方案對(duì)我不起作用。我一直盯著我的屏幕半小時(shí),但我無法弄清楚我的代碼是如何不同的。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)按下前兩個(gè)按鈕會(huì)產(chǎn)生'Pushing button 1'和'Pushing button 2',另外兩個(gè)按鈕都會(huì)產(chǎn)生'Pushed button False',雖然我預(yù)計(jì)會(huì)有3和4。我還沒有完全理解lambda機(jī)制。究竟有什么聯(lián)系?指向由lambda生成的函數(shù)的指針(使用參數(shù)替換)或者是在信號(hào)觸發(fā)時(shí)評(píng)估的lambda函數(shù)?
使用lambda表達(dá)式連接pyqt中的插槽
幕布斯6054654
2019-08-19 16:40:04