PySide显示/隐藏布局

9
我想根据复选框是否选中显示两种布局之一。 只使用小部件,我可以做到以下操作,这很好用: (在此示例中,每个小部件都是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将以上操作应用于布局而不是小部件,但无法使其正常工作。上次尝试时程序崩溃了。

切换两个布局的最简单方法是什么?它不一定要使用复选框,但我更喜欢这样做。

1个回答

12
将布局放入单独的小部件中。现在你仅仅是“使用小部件”。
这里是一个例子:
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_()

运行它以查看它的工作方式。


我应该写成“仅使用小部件”。哪种小部件可以放置在布局内?我认为小部件应该放入布局中,而不是相反。 - user985366
1
你可以将布局放入大多数小部件中。通常使用 QWidgetQFrame。我来举个例子。 - Oleh Prypin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接