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