Capture la variable del bucle for para usar más tarde en QPushButton [duplicado]
Esta pregunta ya tiene una respuesta aquí:
Usando la expresión lambda para conectar ranuras en pyqt 3 respuestasDescargo de responsabilidad: Ya he leído otras preguntas como esta (por ejemplo, estouno) pero todavía no he encontrado una solución que funcione (o simplemente no las entiendo :))
Cuando creo unlambda
dentro de un bucle for para acceder a datos desde el alcance del bloque me sale unapylint
advertencia (cell-var-from-loop
) por la forma en que las capturas de Python funcionan. P.ej:
for key, value in data.items():
button = QtGui.QPushButton('show data')
button.clicked.connect(lambda: show_data(value))
table_widget.setCellWidget(1, 1, button)
Hay más preguntas como esta, pero todavía no sé cómo resuelvo sistemáticamente este problema. Traté de proporcionar valores predeterminados alambda
como sugeridoaquí:
for key, value in data.items():
button = QtGui.QPushButton('show data')
button.clicked.connect(lambda v=value: show_data(v))
table_widget.setCellWidget(1, 1, button)
Pero cuando lo hago así, suceden cosas extrañas, mientrasvalue
debería ser una cuerda en mi ejemploshow_data
se llama con unbool
.
¿Estoy haciendo algo totalmente mal? ¿Debería funcionar este enfoque?