免责声明:我已经阅读过这样的其他问题(例如,这个one)但是找不到适合我的解决方案(或者我只是不明白他们:))
当我在for循环中创建一个lambda
来访问来自块范围的数据时,由于Python捕获工作的方式,我得到pylint
警告(cell-var-from-loop
)。 E.g:
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
正在调用它。
我做错了吗?这种方法应该有效吗?
答案 0 :(得分:1)
clicked signal发送已检查的参数。所以试试:
button.clicked.connect(lambda chk, v=value: show_data(v))