QStackedLayout类提供了多页面切换的布局,一次只能看到一个界面。该类的继承层次结构如下:
(QObject,QLayoutltem) - QLayout - QStackedLayout
构造函数为:
QStackedLayout([QWidget parent])
与QFormLayout一样,不是QWidget类的继承者,因此没有自己的窗口,不能单独使用。 因此,容器作为子控件使用。要在构造函数中指定父组件。如果没有,可将容器作参数,调用父组件的setLayout( )方法。例:
import sys
from PyQt5 import QtWidgets, QtCore
class MyWidget(QtWidgets.QWidget):
def init(self, i=0):
super().init()
self.setWindowTitle('小部件 ' + str(i))
label = QtWidgets.QLabel('小部件 ' + str(i)+'可见')
layout = QtWidgets.QHBoxLayout(self)
layout.addWidget(label)
class TestWidget(QtWidgets.QWidget):
def init(self, parent=None):
super().init(parent)
layout = QtWidgets.QVBoxLayout(self)
stack = QtWidgets.QStackedLayout() # ② Layout
list = QtWidgets.QListWidget(self)
list.setDragEnabled(True)
list.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
layout.addWidget(list)
layout.addLayout(stack) # ② 对应 addLayout
for i in range(10):
stack.addWidget(MyWidget(i))
list.addItem("小部件 i" % i)
list.currentRowChanged.connect(stack.setCurrentIndex)
if name == "main":
app = QtWidgets.QApplication(sys.argv)
widget = TestWidget()
#widget = MyWidget()
widget.show()
sys.exit(app.exec_())
该类的方法有:
addWidget(QWidget widget) - 将一个组件添加到容器的末尾,返回添加组件的索引;
insertWidget(int index,QWidget widget) - 将组件添加到指定的容器位置,返回添加组件的索引;
setCurrentIndex (int index) - 将索引为index的组件设为可见,是个槽函数。
currentIndex () - 返回可见组件的索引;
setCurrentWidget(QWidget widget) - 将组件设为可见,是个槽函数。
currentWidget() - 返回可见组件;
setStackingMode (
StackOne - 0 - 仅一个组件可见(默认值);
StackAll - 1 - 所在组件可见;
stackingMode () - 返回层叠组件的可见方式;
count( ) - 返回容器中组件的数量;
widget (int index) - 返回索引值为index的组件。如果不存在,返回None.
QStackedWidget类实现组件层叠,但它是一个组件,而不是一个容器。 继承层次结构如下所示:
(QObject,QPaintDevice) - QWidget - QFrame - QStackedWidget
构造函数:
QStackedWidget(QWidget parent)
该类在以下方法:
addWidget( ),insertWidget( ), removeWidget( ), replaceWidget( ), count( ), currentIndex( ),currentWidget( ),widget( ),setCurrentIndex( )和setCurrentWidget( )等,其用法与QStackedLayout类的对应方法相同。
QStackedWidget类中新增的方法有:
indexOf(QWidget widget) - 返回组件的索引;
_len_() - 返回组件的数量,调用len( )时调用。
跟踪组件中的变化,可处理currentChanged和widgetRemoved信号。