从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_data
用bool
。
我做错了什么吗?这种方法行得通吗?
问题答案: