PyQt5编程(27):在窗口中布局组件—QStackedLayout类和QStackedWidget类

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信号。

你可能感兴趣的:(PyQt5编程(27):在窗口中布局组件—QStackedLayout类和QStackedWidget类)