QStackedLayout類提供了多頁面切換的布局,一次只能看到一個界面。該類的繼承層次結(jié)構(gòu)如下:
(QObject,QLayoutltem) - QLayout - QStackedLayout
構(gòu)造函數(shù)為:
QStackedLayout([QWidget parent])
與QFormLayout一樣,不是QWidget類的繼承者,因此沒有自己的窗口,不能單獨使用。 因此,容器作為子控件使用。要在構(gòu)造函數(shù)中指定父組件。如果沒有,可將容器作參數(shù),調(diào)用父組件的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) # ② 對應(yīng) 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的組件設(shè)為可見,是個槽函數(shù)。
currentIndex () - 返回可見組件的索引;
setCurrentWidget(QWidget widget) - 將組件設(shè)為可見,是個槽函數(shù)。
currentWidget() - 返回可見組件;
setStackingMode (
StackOne - 0 - 僅一個組件可見(默認值);
StackAll - 1 - 所在組件可見;
stackingMode () - 返回層疊組件的可見方式;
count( ) - 返回容器中組件的數(shù)量;
widget (int index) - 返回索引值為index的組件。如果不存在,返回None.
QStackedWidget類實現(xiàn)組件層疊,但它是一個組件,而不是一個容器。 繼承層次結(jié)構(gòu)如下所示:
(QObject,QPaintDevice) - QWidget - QFrame - QStackedWidget
構(gòu)造函數(shù):
QStackedWidget(QWidget parent)
該類在以下方法:
addWidget( ),insertWidget( ), removeWidget( ), replaceWidget( ), count( ), currentIndex( ),currentWidget( ),widget( ),setCurrentIndex( )和setCurrentWidget( )等,其用法與QStackedLayout類的對應(yīng)方法相同。
QStackedWidget類中新增的方法有:
indexOf(QWidget widget) - 返回組件的索引;
_len_() - 返回組件的數(shù)量,調(diào)用len( )時調(diào)用。
跟蹤組件中的變化,可處理currentChanged和widgetRemoved信號。