This question already has answers here:
Using lambda expression to connect slots in pyqt
                                
                                    (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