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 respuestas

Descargo 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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta