首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(PyQT)在布局之前删除并绘制新布局

(PyQT)在布局之前删除并绘制新布局
EN

Stack Overflow用户
提问于 2022-08-11 04:31:59
回答 1查看 29关注 0票数 0

我在主布局上做了三个QVboxlayout,第二个QVboxlayout有三个子QHBoxlayout,它有复选框和组框。

第二,QVboxlayout有一个名为checkboxlayout的布局。

初始状态

单击Make按钮时,第二个QVBoxlayout (=复选框布局)将显示20x3复选框和groupbox。

使按钮单击时

另外,单击“第二个Make”按钮,我需要清除框和标签,但是PyQT在布局之前覆盖。

重复指数 (参见索引编号显示重复:1和2)

如果没有self.checkboxlayout.takeAt(0)代码,那么PyQT将生成相同的复选框底部

没有takeAt代码

如何删除第一个复选框布局,以获得清晰的第二个复选框布局?

代码语言:javascript
运行
复制
def initUI(self):
    self.clickedidx = 0

    self.lineEdit1 = QLineEdit()
    self.pushButton1 = QPushButton(" Make ")
    self.pushButton2 = QPushButton(" I am dumb ")
    self.pushButton1.clicked.connect(self.onEnter)
    self.hlayout = QHBoxLayout()
    self.vlayout = QVBoxLayout()

    self.hlayout.addWidget(QLabel('Link:'), alignment=Qt.AlignTop)
    self.hlayout.addWidget(self.lineEdit1, alignment=Qt.AlignTop)
    self.hlayout.addWidget(self.pushButton1, alignment=Qt.AlignTop)
    self.vlayout.addLayout(self.hlayout)

    self.checkboxlayout = QVBoxLayout()
    self.vlayout.addLayout(self.checkboxlayout)

    self.hlayout = QHBoxLayout()
    self.hlayout.addWidget(self.pushButton2, alignment=Qt.AlignBottom)
    self.vlayout.addLayout(self.hlayout)

    self.setLayout(self.vlayout)
    self.center()
    self.show()

def onEnter(self):
    self.clickedidx += 1
        
    groupbox = QGroupBox()
    checkbox = []
    hlayout = QHBoxLayout()
    vlayout = QVBoxLayout()
    
    for i in range(1, 21):
        widget = QCheckBox( num2words(i) + " " + str(self.clickedidx) ) 
        vlayout.addWidget(widget)
    groupbox.setLayout(vlayout)
    hlayout.addWidget(groupbox)
        
    groupbox = QGroupBox()
    vlayout = QVBoxLayout()
    for i in range(21, 41):
        widget = QCheckBox( num2words(i) + " " + str(self.clickedidx) ) 
        vlayout.addWidget(widget)
    groupbox.setLayout(vlayout)
    hlayout.addWidget(groupbox)
    
    groupbox = QGroupBox()
    vlayout = QVBoxLayout()
    for i in range(41, 61):
        widget = QCheckBox( num2words(i) + " " + str(self.clickedidx) ) 
        vlayout.addWidget(widget)
    groupbox.setLayout(vlayout)
    hlayout.addWidget(groupbox)
    
    self.checkboxlayout.takeAt(0)
    self.checkboxlayout.addLayout(hlayout)
EN

回答 1

Stack Overflow用户

发布于 2022-08-11 08:55:32

解决了。

我修改/添加了onEnter()方法的代码末尾

代码语言:javascript
运行
复制
item = self.checkboxlayout.takeAt(0)
self.checkboxlayout.addLayout(hlayout)
    if self.clickedidx > 1 :
        widget = item.widget()
        if widget is not None:
            widget.setParent(None)
        else:
            deleteItemsOfLayout( item.layout() )

并增加了函数deleteItemsOfLayout(布局)

代码语言:javascript
运行
复制
def deleteItemsOfLayout(layout):
    if layout is not None:
        while layout.count():
            item = layout.takeAt(0)
            widget = item.widget()
            if widget is not None:
                widget.setParent(None)
            else:
                deleteItemsOfLayout(item.layout())

问题是self.checkboxlayout.takeAt(0)删除了旧的复选框布局,

但是不删除旧的小部件,所以结果显示了重复的小部件。

在这方面提供了帮助:

PyQt如何从布局中删除布局

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

https://stackoverflow.com/questions/73315298

复制
相关文章

相似问题

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