首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PySide2 Lambda绑定问题

PySide2 Lambda绑定问题
EN

Stack Overflow用户
提问于 2020-06-24 21:24:23
回答 1查看 79关注 0票数 0

我正在研究PySide2应用程序中的一个(相当基本的)特性。应用程序包含一个复选框列表,当选中复选框时,我需要将复选框的索引附加到列表中。我在这方面的失败尝试如下所示..。

代码语言:javascript
复制
checked = []

cb1 = QCheckBox('1')
cb2 = QCheckBox('2')
cb3 = QCheckBox('3')

cbs = [cb1, cb2, cb3]

for n, cb in enumerate(cbs):
    cb.stateChanged.connect(lambda: checked.append(n) if cb.isChecked() else checked.remove(n))

我发现这里的问题是“后期绑定”,如python的常见问题所描述的那样。每当激活复选框时,n的值始终为2。但是,我尝试使用来自文档的以下解决方案,这些解决方案也失败了。

代码语言:javascript
复制
for n, cb in enumerate(cbs):
    cb.stateChanged.connect(lambda n=n: checked.append(n) if cb.isChecked() else checked.remove(n))
代码语言:javascript
复制
for n, cb in enumerate(cbs):
    cb.stateChanged.connect(lambda n=n, button=button: checked.append(n) if cb.isChecked() else checked.remove(n))

第一种方法给出了n的随机和不正确的值,第二种方法以某种方式将按钮变量转化为整数。在只有几个复选框的情况下,我会考虑逐个设置这些函数,但在实际应用程序中,需要有大约20个复选框。任何有关这方面的洞察力都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-24 22:33:17

试一试:

代码语言:javascript
复制
class Demo(QWidget):
    def __init__(self):
        super().__init__()

        self._checked = []

        self.cb1 = QCheckBox('1')
        self.cb2 = QCheckBox('2')
        self.cb3 = QCheckBox('3')
        
        layout = QVBoxLayout(self)
        layout.addWidget(self.cb1)
        layout.addWidget(self.cb2)
        layout.addWidget(self.cb3)

        cbs = [self.cb1, self.cb2, self.cb3]
        for n, cb in enumerate(cbs):
            cb.stateChanged.connect(lambda state, n=n+1: self.list_checked(state, n))
            
    def list_checked(self, state, n):
        if state:
            self._checked.append(n)
        else:
            self._checked.remove(n)
        print(self._checked)

   
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    wform = Demo()
    wform.resize(200, 100)
    wform.show()
    sys.exit(app.exec_())  

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62564307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档