PyQt5編程(27):在窗口中布局組件—QStackedLayout類和QStackedWidget類

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信號。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容