编程语言
首页 > 编程语言> > python – 从for循环中捕获变量,以便稍后在QPushButton中使用[复制]

python – 从for循环中捕获变量,以便稍后在QPushButton中使用[复制]

作者:互联网

参见英文答案 > Using lambda expression to connect slots in pyqt                                    3个
免责声明:我已经阅读过这样的其他问题(例如,这个one)但是我找不到一个有用的解决方案(或者我只是不理解它们:))

当我在for循环中创建一个lambda来访问来自块范围的数据时,由于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)

还有更多这样的问题,但我现在还没有系统地解决这个问题.我试图像建议的here那样为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)

但是当我这样做的时候会发生奇怪的事情 – 虽然在我的例子中值应该是一个字符串,但show_data是用bool调用的.

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

解决方法:

clicked signal发送一个检查参数.所以尝试:

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

标签:python,lambda,scope,pyqt,pylint
来源: https://codeday.me/bug/20191008/1875110.html