Capture a variável do loop for para usar posteriormente em QPushButton [duplicate]

Esta pergunta já tem uma resposta aqui:

Usando expressão lambda para conectar slots no pyqt 3 respostas

aviso Legal: Já li outras perguntas como essa (por exemplo, esta1), mas ainda não encontrei uma solução funcional (ou simplesmente não as entendo :))

Quando eu crio umlambda dentro de um loop for acessando dados do escopo do bloco, recebo umpylint Aviso (cell-var-from-loop) devido à maneira como o Python captura o trabalho. Por exemplo:

for key, value in data.items():
    button = QtGui.QPushButton('show data')
    button.clicked.connect(lambda: show_data(value))
    table_widget.setCellWidget(1, 1, button)

Existem mais perguntas como essa, mas ainda não sei como resolvo sistematicamente esse problema. Eu tentei fornecer valores padrão para olambda como sugeridoaqui:

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)

Mas quando eu faço assim, coisas estranhas acontecem - enquantovalue deveria ser uma string no meu exemploshow_data está sendo chamado com umbool.

Estou fazendo algo totalmente errado? Essa abordagem deve funcionar?

questionAnswers(1)

yourAnswerToTheQuestion