This question already has answers here:
Using lambda expression to connect slots in pyqt
(3个答案)
2年前关闭。
免责声明:我已经读过其他类似的问题(例如one),但是还没有找到适合我的解决方案(或者我只是不理解它们:))
当我在for循环内创建一个
还有更多类似的问题,但是我现在仍然不知道如何系统地解决此问题。我尝试为
但是当我这样做时,会发生奇怪的事情-在我的示例中,
我做错了什么吗?这种方法行得通吗?
(3个答案)
2年前关闭。
免责声明:我已经读过其他类似的问题(例如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)
还有更多类似的问题,但是我现在仍然不知道如何系统地解决此问题。我尝试为
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发送一个检查的参数。因此,请尝试:
button.clicked.connect(lambda chk, v=value: show_data(v))
关于python - 从for循环中捕获变量,以供以后在QPushButton中使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44474805/
10-13 05:05