我正在尝试显示两种布局中的一种,具体取决于是否选中了复选框。
仅使用小部件我可以执行以下操作: (此示例中的每个小部件都是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在布局而不是小部件上执行上述操作,但无法使其工作。该程序在我最后一次尝试时崩溃了。
在两种布局之间切换的最简单方法是什么?它不必使用复选框,但我更喜欢。
答案 0 :(得分:9)
将布局放入单独的小部件中。现在你“只使用小部件”。
以下是一个例子:
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_()
运行它以查看它是如何工作的。