使用QStackedLayout查看不同的布局

2024-04-23 19:01:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个对话框,有一个小部件/布局充满了按钮。我可以生成一个布局,它是QHBoxLayout,一个是QGridLayout。两者都很好。但现在我想为用户提供在这两者之间切换的选项。所以我认为带有单独机制setCurrentIndex的QStackedLayout将是正确的答案。遗憾的是,下面的按钮只显示了一组代码。我遗漏了一些东西,但我找不到什么。我希望我可以重用——而不是有两套——QCheckBox。有2套会让其他人做噩梦。在

    # Check box's layout ... List
    checksLayoutW0 = QtGui.QWidget()
    checksLayout0 = QtGui.QVBoxLayout(checksLayoutW0)
    checksLayout0.setMargin(1)
    checksLayout0.setSpacing(1)      
    self.cbList = []
    for head in self.headers:
        show = not head.hidden and (not head.phase or (head.phase and self.phase))
        if show:
            head_str = str(head)
            checksItem = QtGui.QCheckBox(head_str)
            checksItem.setToolTip("Channel {}".format(head_str))
            checksItem.setObjectName(head_str)
            if head.phase:
                checksItem.setStyleSheet("QWidget {background-color:Green}")
            self.cbList.append(checksItem)
            checksLayout0.addWidget(checksItem)
    # End Check box layuout - List
    # Check box's layout ... Grid
    checksLayoutW1 = QtGui.QWidget()
    checksLayout1 = QtGui.QGridLayout(checksLayoutW1)
    checksLayout1.setColumnStretch(200,5)
    checksLayout1.setMargin(1)
    checksLayout1.setSpacing(1)      
    column_index = 0
    row_index = 0
    for checkbox in self.cbList:
            checksLayout1.addWidget(checkbox, row_index, column_index)
            if column_index < 4:
                column_index += 1
            else:
                row_index += 1
                column_index = 0
    # End Check box layuout - Grid
    self.checkerHlayout = QtGui.QHBoxLayout(self.scroll_viewWidget)        
    self.stackedLayout = QtGui.QStackedLayout()
    self.stackedLayout.addWidget(checksLayoutW0)
    self.stackedLayout.addWidget(checksLayoutW1)
    self.stackedLayout.setCurrentIndex(0)
    self.checkerHlayout.addLayout(self.stackedLayout)

Tags: selfboxindexcheckcolumnheadstrqtgui
1条回答
网友
1楼 · 发布于 2024-04-23 19:01:13

小部件不能属于多个布局。每当一个小部件被添加到一个布局中时,它会自动重新配置:

>>> w = Qt.QWidget()
>>> vbox = Qt.QVBoxLayout(w)
>>> x = Qt.QWidget()
>>> hbox = Qt.QHBoxLayout(x)
>>> b = Qt.QCheckBox()
>>> vbox.addWidget(b)
>>> b.parent() is w
True
>>> vbox.count()
1
>>> hbox.addWidget(b)
>>> vbox.count()
0
>>> b.parent() is x
True

因此,如果你想改变一组小部件的布局,你必须动态地做。但是,您应该知道,每当从网格布局中删除项时,逻辑行和列的数量永远不会减少,即使可视化的行或列的数量可能会减少。正因为如此,每次从一个新的布局开始可能会更好,而不是尝试重用现有的布局。在

相关问题 更多 >