PyQt collegare metodo bug quando viene utilizzato in un ciclo che crea i widget da una lista
Domanda
Ho un programma con interfaccia grafica,
E 'automatico creare pulsanti da un elenco di nomi, e connettersi a una funzione stampa il suo nome.
, ma quando ho eseguito questo programma, premo tutti i pulsanti,
tutti ritornano nome dell'ultimo tasto.
Mi chiedo come mai questa cosa accade. può aiutare uno qualsiasi?
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import logging
logging.basicConfig(level=logging.DEBUG,)
class MainWindow(QWidget):
def init(self):
names = ('a','b','c')
lo = QHBoxLayout(self)
for name in names:
button = QPushButton(name,self)
lo.addWidget(button)
self.connect(button,SIGNAL("clicked()"),
lambda :logging.debug(name))
if __name__=="__main__":
app = QApplication(sys.argv)
m = MainWindow();m.init();m.show()
app.exec_()
risultato simile:
python t.py
DEBUG:root:c
DEBUG:root:c
DEBUG:root:c
Soluzione
Vedo almeno un bug nel codice.
Sostituire:
lambda :logging.debug(name)
lambda name=name: logging.debug(name)
Perché i risultati della mappa () e di lista sono diverso? per i dettagli.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow