一、概述
StackedWidget堆疊窗口部件爲一系列窗口部件的堆疊,對應類爲QStackedWidget。QStackedWidget類對應部件爲放在堆棧中的多個窗口部件,這些放在堆棧中的窗口部件在界面上只能看到一個窗口。
二、屬性
2.1、概述
在Designer中StackedWidget堆疊窗口部件非常簡單,只有2個,如下:
除了這2個屬性外,還有個未在Designer中設置的動態屬性count。
2.2、currentIndex屬性
currentIndex屬性保存堆疊窗口部件的當前窗口的索引。如果沒有當前窗口,則當前索引爲-1。默認情況下,此屬性值爲-1,因爲堆最初爲空。在Designer中,部件設計拖拽到頁面時,會初始化2個頁面,此時currentIndex初始值爲0。
可以通過currentIndex()和setCurrentIndex(int index)方法訪問該屬性,噹噹前頁切換時,會發射currentChanged(int index)信號,參數爲新的當前頁索引。
2.3、currentPageName屬性
StackedWidget堆疊窗口部件的currentPageName屬性,在對應類QStackedWidget中並沒有該同名屬性,實際上該屬性是StackedWidget中當前頁面窗口對應部件的名字,通過部件的objectName屬性訪問。
2.4、count屬性
count屬性保存了堆疊窗口部件中的窗口數量,可以使用count()訪問。
三、重要方法
3.1、增加頁面窗口的方法
可以使用addWidget和insertWidget方法在堆疊窗口部件部件中增加一個頁面窗口,調用方法如下:
- int addWidget(QWidget widget)
- int insertWidget(int index, QWidget widget)
說明:13971127980
- widget:爲新加的頁面窗對象,任何QWidget及其派生類的實例都可以
- index:堆疊窗的位置索引,從0計數,如果超出範圍,則在最後面添加
- 返回值:新增加堆疊窗的索引值
- 如果堆疊窗口部件部件爲空無窗口部件,新加入部件即成爲當前頁面窗,否則當前頁面窗保持不變
3.2、取堆疊窗口部件中指定索引的頁面窗口
可以使用widget方法從堆疊窗口部件中取指定索引的堆疊窗實例對象,調用語法如下:
-QWidget widget(int index)
注意:如果index超出範圍則返回None。
3.3、取堆疊窗當前窗口
可以使用currentWidget方法獲取當前頁面窗口對象,調用語法如下:
- QWidget currentWidget()
注意:如果沒有當前窗口則返回None。
3.4 取堆疊窗在部件中的索引順序
可以使用indexOf方法取頁面窗口對象在堆疊窗部件中的索引,調用語法:
- int indexOf(QWidget widget)
3.5、移除一個堆疊窗
可以使用removeWidget從堆疊窗部件中移除參數指定的對應頁面窗口,調用語法如下:
- removeWidget(QWidget widget)
注意:
- 由於removeWidget的參數是QWidget 對象,使用起來不是很方便,可以通過widget結合索引方法獲取部件再傳遞給removeWidget使用
- remove只是移除了索引對應窗口,並沒有刪除窗口實例對象
四、相關信號
除了從父類繼承的信號外,QStackedWidget堆疊窗口部件只有兩個信號:
- currentChanged(int index):當前窗口發生了切換時發射該信號,index爲新的當前窗口索引
- widgetRemoved(int index):當從堆疊窗口部件中移除一個窗口時發射此信號。
五、小結
QStackedWidget堆疊窗口部件創建後,可以使用addWidget()方法添加一個窗口到列表的末尾,也可以使用insertWidget()方法將窗口插入到給定的位置。可以使用removeWidget從堆疊窗部件中移除一個頁面窗口。堆疊窗部件中的頁面窗口數量使用count()方法獲取。
屏幕上顯示的窗口部件索引由currentIndex()給出,可以使用setCurrentIndex()進行更改。以類似的方式,可以使用currentWidget()獲取當前顯示的頁面窗口部件,如果要更改當前頁面窗口可以使用setCurrentWidget()方法進行更改。
每當堆疊窗口中的當前頁面窗口更改或從堆疊窗口部件中移除頁面窗口時,會分別發出currentChanged()和widgetRemoved()信號。
廣告
老猿關於PyQt的付費專欄《使用PyQt開發圖形界面Python應用》只需要9.9元,該部分與第十五章的內容基本對應,但同樣內容在付費專欄上總體來說更詳細、案例更多。本節內容對應付費專欄的《第二十八章、containers容器類部件QStackedWidget堆疊窗口部件詳解》。如果有興趣也願意支持老猿的讀者,歡迎購買付費專欄。