pyside显示/隐藏布局(pyside show / hide layouts)

2019-09-20 20:57发布

我想显示取决于复选框是否被选中与否两种布局之一。

只有使用小工具,我可以做的正常工作如下:(在这个例子中每个插件是一个QLineEdit的)

myCheckbox.stateChanged.connect(switchControls)

def switchControls (self, state):
    if state == 2:
        self.widget1.show()
        self.widget2.hide()
    else:
        self.widget1.hide()
        self.widget2.show()

然而,因为我想一个描述性标签添加到每个QLineEdit的,我需要一个QLineEdit的+ QLabel在某种类型的布局或容器中混合。 我一直在努力的addlayout / removeLayout /的removeItem做的布局,而不是部件上面,但不能让它开始工作。 该计划坠毁,机上我的最后一次尝试。

什么是两个布局之间切换的最简单的方法? 它没有使用复选框,但我更喜欢。

Answer 1:

把布局成单独的部件。 现在,你“只使用小工具”。

下面是一个例子:

from PySide.QtCore import *
from PySide.QtGui import *

class MainWindow(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.layout=QVBoxLayout()
        self.setLayout(self.layout)


        self.checkbox=QCheckBox("Layouts")
        self.layout.addWidget(self.checkbox)


        self.widget1=QWidget()
        self.layout.addWidget(self.widget1)

        self.layout1=QVBoxLayout()
        self.widget1.setLayout(self.layout1)

        self.layout1.addWidget(QLabel("First layout"))

        self.layout1.addWidget(QTextEdit())


        self.widget2=QWidget()
        self.layout.addWidget(self.widget2)

        self.layout2=QHBoxLayout()
        self.widget2.setLayout(self.layout2)

        self.layout2.addWidget(QTextEdit("Second layout"))

        self.layout2.addWidget(QTextEdit())


        self.checkbox.toggled.connect(self.checkbox_toggled)
        self.checkbox.toggle()

        self.show()

    def checkbox_toggled(self, state):
        self.widget1.setVisible(state)
        self.widget2.setVisible(not state)

app=QApplication([])
mw=MainWindow()
app.exec_()

运行它,看看它是如何工作的。



文章来源: pyside show / hide layouts