【pyqt5学习】——containers相关控件(tab widget、scroll area、stack widget、tool box、MDI area、dock widget)
目錄
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
總結
以上是生活随笔為你收集整理的【pyqt5学习】——containers相关控件(tab widget、scroll area、stack widget、tool box、MDI area、dock widget)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转发)详解汽车UDS诊断协议(一)
- 下一篇: Servlet跳转到JSP页面后的路径问