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

Capture variable from for-loop for using later in QPushButton

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

当我在 for 循环内创建一个 lambda 从块范围访问数据时,由于 Python 捕获工作。例如:

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 提供默认值 here:

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_data 被调用 bool.

我做错了什么吗?这种方法应该有效吗?

clicked signal 发送一个 checked 参数。所以尝试:

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