从 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))
免责声明:我已经读过其他类似的问题(例如这个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))