从for循环中捕获变量,以供以后在QPushButton中使用


问题内容

这个问题已经在这里有了答案

使用Lambda表达式连接pyqt中的插槽 (3个答案)

3年前关闭。

免责声明
:我已经读过其他类似的问题(例如,这个问题),但还没有找到适合我的解决方案(或者我只是不理解它们:))

当我在lambda内部创建一个for循环以访问块范围内的数据时,由于Python捕获工作的方式,我会收到pylint警告(cell-var- from-loop)。例如:

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

还有更多类似的问题,但我现在仍然不知道如何系统地解决此问题。我试图提供默认值给lambda这里建议的:

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)

但是当我像这样做时,会发生奇怪的事情-虽然value在我的示例中应该是一个字符串,但是show_databool

我做错了什么吗?这种方法行得通吗?


问题答案:

点击的信号发送检查参数。因此,请尝试:

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