目錄
1、tab widget
2、scroll area
2.1 使用方法
Step1.拖入QScrollArea
?Step2.改變widget控件布局
?Step3.設置scrollAreaWidgetContents大小
?3、Tool Box
?4、Stacked Widget
4.1 案例展示
?5、frame
6、MDI AREA
?7、dock widget
7.1 懸浮狀態
?7.2 吸附狀態
containers是所有容器的統稱,主要是為了容納不同的對象類型,不同的container有不同的形式和特點。注:在同一個界面內的控件名不會出現重復,比如不同的tab頁的控件名稱也不會出現重復。但是在不同的彈出窗口的控件名稱則可以重復。
1、tab widget
該控件主要的作用是利用tab頁在同一個區域切換不同的界面,而不是將彈出新的窗口來顯示界面,可以理解為Word文檔上方的工具欄,點擊開始、編輯、布局會出現不同的內容
?
PyQt5系列教程(50):QTabWidget的使用 - 知乎https://zhuanlan.zhihu.com/p/37854878
?
2、scroll area
該控件可以容納不同的其他控件,當scroll area的大小小于contents的大小時,會出現滑條,這樣就可以通過滾動滑條來查看所有scroll area中的控件,同時這也是一種適應不同分辨率電腦的方法。有些時候,我們界面能展示的區域被限定的很小,但是需要展現的控件、內容卻很多,在限定大小的區域中無法全部顯示。這個時候就需要滾動條了。在Qt中有一個很好的類
QScrollArea
。重點是要掌握如何使得滑條出現,這里需要設置父級窗口之間的布局,達到和最高級窗口自適應的效果,如何修改scroll area下的一個子控件scrollAreaWidgetContents的最小窗口大小,當窗口小于該值時,會出現滑條。具體看下面博主的案例
?
?
[Qt]如何用好QScrollArea_祥的專欄-CSDN博客_qt scrollarea怎么用http://blog.csdn.net/humanking7/article/details/78559692
2.1 使用方法
本文直接用 Qt Designer 去設計ui文件,當然也可以直接在代碼中寫。
Step1.拖入QScrollArea
在Widget box中找到QScrollArea控件,拖入窗體。

Step2.改變widget控件布局
?其目的,就是讓scrollArea隨著窗體變化而變化。

Step3.設置scrollAreaWidgetContents大小
現在的窗體即時縮小到最小的情況,也不會出現滾動條,如下圖所示。
?
這是因為我們沒有設置scrollAreaWidgetContents這個控件的最小值。
??? 正常情況下將scrollAreaWidgetContents中的內容展示完全大小,如geometry所示為[201 x 174]。
??? 將它的minimumSize設置為[200 x 170]。
這樣當界面的面積小于[200 x 170]時,界面就會出現滾動條。
?
?3、Tool Box
使用場景(類似于QQ中的好友分組):
這里主要是為了演示TOOL bOX控件的使用方法
1、tool box可以理解為一個抽屜組合,每一個按鈕為一個抽屜,點擊按鈕則會拉開抽屜,顯示出抽屜內部的內容
2、可以將不同的按鈕歸類到不同的tool box中,然后對按鈕進行信號與槽的綁定
3、這里演示了三組按鈕的歸類,分別為tool button、pushbutton、radio button
?
?4、Stacked Widget
?該控件和tab widget一樣,都是可以在同一個窗口內切換不同的界面,而不是新彈出窗口的方式來顯示新界面。但是和tab widget不一樣的是,tab widget控件自帶了tab按鍵,可以通過tab按鍵來定義每一個頁面的名稱。而stacked widget控件則不能為每一個頁面命名,但是在右上角有兩個箭頭,點擊箭頭可以切換到不同的頁面,該控件一般和控件list widget配合使用,這樣就可以通過點擊list widget中的選項來控制顯示不同的界面。當然需要注意的是要通過信號和槽來實現list widget和stacked widget進行聯動。
?
PyQt5高級界面控件之QStackedWidget(七)_jia666666的博客-CSDN博客_pyqt qstackedwidgethttps://blog.csdn.net/jia666666/article/details/81669425
4.1 案例展示
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *class StackedExample(QWidget):def __init__(self):super(StackedExample, self).__init__()#設置窗口初始位置和大小self.setGeometry(300,50,10,10)self.setWindowTitle('StackedWidget 例子')#創建列表窗口,添加條目self.leftlist=QListWidget()self.leftlist.insertItem(0,'聯系方式')self.leftlist.insertItem(1,'個人信息')self.leftlist.insertItem(2,'教育程度')#創建三個小控件self.stack1=QWidget()self.stack2=QWidget()self.stack3=QWidget()self.stack1UI()self.stack2UI()self.stack3UI()#在QStackedWidget對象中填充了三個子控件self.stack=QStackedWidget(self)self.stack.addWidget(self.stack1)self.stack.addWidget(self.stack2)self.stack.addWidget(self.stack3)#水平布局,添加部件到布局中HBox=QHBoxLayout()HBox.addWidget(self.leftlist)HBox.addWidget(self.stack)self.setLayout(HBox)self.leftlist.currentRowChanged.connect(self.display)def stack1UI(self):layout=QFormLayout()layout.addRow('姓名',QLineEdit())layout.addRow('地址',QLineEdit())self.stack1.setLayout(layout)def stack2UI(self):# zhu表單布局,次水平布局layout = QFormLayout()sex = QHBoxLayout()# 水平布局添加單選按鈕sex.addWidget(QRadioButton('男'))sex.addWidget(QRadioButton('女'))# 表單布局添加控件layout.addRow(QLabel('性別'), sex)layout.addRow('生日', QLineEdit())self.stack2.setLayout(layout)def stack3UI(self):# 水平布局layout = QHBoxLayout()# 添加控件到布局中layout.addWidget(QLabel('科目'))layout.addWidget(QCheckBox('物理'))layout.addWidget(QCheckBox('高數'))self.stack3.setLayout(layout)def display(self,i):#設置當前可見的選項卡的索引self.stack.setCurrentIndex(i)
if __name__ == '__main__':app=QApplication(sys.argv)demo=StackedExample()demo.show()sys.exit(app.exec_())
?
?5、frame
QFrame是一個基類,可以直接使用;主要是用來控制一些邊框樣式,例如凸起、凹下、陰影、線寬等;繼承自QWidget
?具體可參考:
PyQt5之QFrame對象_李濟雄的博客-CSDN博客_pyqt5 qframehttps://blog.csdn.net/weixin_43496130/article/details/104242882
6、MDI AREA
一種同時顯示多個窗口的方法是,創建多個獨立的窗口,這些獨立的窗口被稱為SDI(Single Document Interface 單文檔界面),每個窗口都有自己的菜單系統,工具欄等,這需要占用很多資源
MDI(Multiple Document Interface 多文檔界面)應用程序占用較少的內存資源,子窗口可以放在主窗口的容器中,這個容器控件被稱為QMidArea
QMidArea控件通常占據在QMainWindow對象的中央位置,子窗口在這個區域是QMdiSubWindow類的實例,可以設置任何QWidget作為子窗口對象的內部控件,子窗口在MDI區域進行級聯排列布局
?參考鏈接:
PyQt5高級界面控件之QMidArea(九)_jia666666的博客-CSDN博客_pyqt5 qmdiareahttps://blog.csdn.net/jia666666/article/details/81670569
?
?7、dock widget
該控件是一個窗口,可以吸附在主窗口的四邊內,也可以懸浮在主窗口外。
QDockWidget是一個可以停靠在QMainWindow內的窗口控件,它可以保持在浮動狀態或者在指定位置作為子窗口附加到主窗口中,QMainWindow類的主窗口對象保留有一個用于停靠窗口的區域,這個區域在控件的中央周圍
7.1 懸浮狀態
?7.2 吸附狀態
?參考:
PyQt5高級界面控件之QDockWidget(八)_jia666666的博客-CSDN博客https://blog.csdn.net/jia666666/article/details/81669995