Capturar la variable de for-loop para usar más tarde en QPushButton

Descargo de responsabilidad : ya he leído otras preguntas como esta (por ejemplo, esta) pero todavía no he encontrado una solución que funcione (o simplemente no las entiendo)

Cuando creo una lambda dentro de un bucle for para acceder a los datos desde el scope del bloque, pylint una advertencia de pylint ( cell-var-from-loop ) debido a la forma en que funcionan las capturas de Python. 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 entiendo cómo resuelvo sistemáticamente este problema. Traté de proporcionar valores predeterminados a la lambda como se sugiere aquí :

 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 raras, mientras que el value debería ser una cadena en mi ejemplo, show_data se llama con un bool .

¿Estoy haciendo algo totalmente mal? ¿Debería este enfoque funcionar?

La señal pulsada envía un parámetro comprobado. Así que prueba:

 button.clicked.connect(lambda chk, v=value: show_data(v))