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

时间:2017-06-10 15:06:24

标签: python lambda scope pyqt pylint

免责声明:我已经阅读过这样的其他问题(例如,这个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正在调用它。

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

1 个答案:

答案 0 :(得分:1)

clicked signal发送已检查的参数。所以试试:

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