我有一个对话框,有一个小部件/布局充满了按钮。我可以生成一个布局,它是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)
小部件不能属于多个布局。每当一个小部件被添加到一个布局中时,它会自动重新配置:
因此,如果你想改变一组小部件的布局,你必须动态地做。但是,您应该知道,每当从网格布局中删除项时,逻辑行和列的数量永远不会减少,即使可视化的行或列的数量可能会减少。正因为如此,每次从一个新的布局开始可能会更好,而不是尝试重用现有的布局。在
相关问题 更多 >
编程相关推荐