【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.設(shè)置scrollAreaWidgetContents大小
?3、Tool Box
?4、Stacked Widget
4.1 案例展示
?5、frame
6、MDI AREA
?7、dock widget
7.1 懸浮狀態(tài)
?7.2 吸附狀態(tài)
containers是所有容器的統(tǒng)稱,主要是為了容納不同的對(duì)象類型,不同的container有不同的形式和特點(diǎn)。注:在同一個(gè)界面內(nèi)的控件名不會(huì)出現(xiàn)重復(fù),比如不同的tab頁的控件名稱也不會(huì)出現(xiàn)重復(fù)。但是在不同的彈出窗口的控件名稱則可以重復(fù)。
1、tab widget
該控件主要的作用是利用tab頁在同一個(gè)區(qū)域切換不同的界面,而不是將彈出新的窗口來顯示界面,可以理解為Word文檔上方的工具欄,點(diǎn)擊開始、編輯、布局會(huì)出現(xiàn)不同的內(nèi)容
?
PyQt5系列教程(50):QTabWidget的使用 - 知乎https://zhuanlan.zhihu.com/p/37854878
?
2、scroll area
該控件可以容納不同的其他控件,當(dāng)scroll area的大小小于contents的大小時(shí),會(huì)出現(xiàn)滑條,這樣就可以通過滾動(dòng)滑條來查看所有scroll area中的控件,同時(shí)這也是一種適應(yīng)不同分辨率電腦的方法。有些時(shí)候,我們界面能展示的區(qū)域被限定的很小,但是需要展現(xiàn)的控件、內(nèi)容卻很多,在限定大小的區(qū)域中無法全部顯示。這個(gè)時(shí)候就需要滾動(dòng)條了。在Qt中有一個(gè)很好的類 QScrollArea。
重點(diǎn)是要掌握如何使得滑條出現(xiàn),這里需要設(shè)置父級(jí)窗口之間的布局,達(dá)到和最高級(jí)窗口自適應(yīng)的效果,如何修改scroll area下的一個(gè)子控件scrollAreaWidgetContents的最小窗口大小,當(dāng)窗口小于該值時(shí),會(huì)出現(xiàn)滑條。具體看下面博主的案例
?
?
[Qt]如何用好QScrollArea_祥的專欄-CSDN博客_qt scrollarea怎么用http://blog.csdn.net/humanking7/article/details/78559692
2.1 使用方法
本文直接用 Qt Designer 去設(shè)計(jì)ui文件,當(dāng)然也可以直接在代碼中寫。
Step1.拖入QScrollArea
在Widget box中找到QScrollArea控件,拖入窗體。
Step2.改變widget控件布局
?其目的,就是讓scrollArea隨著窗體變化而變化。
Step3.設(shè)置scrollAreaWidgetContents大小
現(xiàn)在的窗體即時(shí)縮小到最小的情況,也不會(huì)出現(xiàn)滾動(dòng)條,如下圖所示。
?
這是因?yàn)槲覀儧]有設(shè)置scrollAreaWidgetContents這個(gè)控件的最小值。
??? 正常情況下將scrollAreaWidgetContents中的內(nèi)容展示完全大小,如geometry所示為[201 x 174]。
??? 將它的minimumSize設(shè)置為[200 x 170]。
這樣當(dāng)界面的面積小于[200 x 170]時(shí),界面就會(huì)出現(xiàn)滾動(dòng)條。
?
?3、Tool Box
使用場(chǎng)景(類似于QQ中的好友分組):
這里主要是為了演示TOOL bOX控件的使用方法
1、tool box可以理解為一個(gè)抽屜組合,每一個(gè)按鈕為一個(gè)抽屜,點(diǎn)擊按鈕則會(huì)拉開抽屜,顯示出抽屜內(nèi)部的內(nèi)容
2、可以將不同的按鈕歸類到不同的tool box中,然后對(duì)按鈕進(jìn)行信號(hào)與槽的綁定
3、這里演示了三組按鈕的歸類,分別為tool button、pushbutton、radio button
?
?4、Stacked Widget
?該控件和tab widget一樣,都是可以在同一個(gè)窗口內(nèi)切換不同的界面,而不是新彈出窗口的方式來顯示新界面。但是和tab widget不一樣的是,tab widget控件自帶了tab按鍵,可以通過tab按鍵來定義每一個(gè)頁面的名稱。而stacked widget控件則不能為每一個(gè)頁面命名,但是在右上角有兩個(gè)箭頭,點(diǎn)擊箭頭可以切換到不同的頁面,該控件一般和控件list widget配合使用,這樣就可以通過點(diǎn)擊list widget中的選項(xiàng)來控制顯示不同的界面。當(dāng)然需要注意的是要通過信號(hào)和槽來實(shí)現(xiàn)list widget和stacked widget進(jìn)行聯(lián)動(dòng)。
?
PyQt5高級(jí)界面控件之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__()#設(shè)置窗口初始位置和大小self.setGeometry(300,50,10,10)self.setWindowTitle('StackedWidget 例子')#創(chuàng)建列表窗口,添加條目self.leftlist=QListWidget()self.leftlist.insertItem(0,'聯(lián)系方式')self.leftlist.insertItem(1,'個(gè)人信息')self.leftlist.insertItem(2,'教育程度')#創(chuàng)建三個(gè)小控件self.stack1=QWidget()self.stack2=QWidget()self.stack3=QWidget()self.stack1UI()self.stack2UI()self.stack3UI()#在QStackedWidget對(duì)象中填充了三個(gè)子控件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()# 添加控件到布局中l(wèi)ayout.addWidget(QLabel('科目'))layout.addWidget(QCheckBox('物理'))layout.addWidget(QCheckBox('高數(shù)'))self.stack3.setLayout(layout)def display(self,i):#設(shè)置當(dāng)前可見的選項(xiàng)卡的索引self.stack.setCurrentIndex(i) if __name__ == '__main__':app=QApplication(sys.argv)demo=StackedExample()demo.show()sys.exit(app.exec_())?
?5、frame
QFrame是一個(gè)基類,可以直接使用;主要是用來控制一些邊框樣式,例如凸起、凹下、陰影、線寬等;繼承自QWidget
?具體可參考:
PyQt5之QFrame對(duì)象_李濟(jì)雄的博客-CSDN博客_pyqt5 qframehttps://blog.csdn.net/weixin_43496130/article/details/104242882
6、MDI AREA
一種同時(shí)顯示多個(gè)窗口的方法是,創(chuàng)建多個(gè)獨(dú)立的窗口,這些獨(dú)立的窗口被稱為SDI(Single Document Interface 單文檔界面),每個(gè)窗口都有自己的菜單系統(tǒng),工具欄等,這需要占用很多資源
MDI(Multiple Document Interface 多文檔界面)應(yīng)用程序占用較少的內(nèi)存資源,子窗口可以放在主窗口的容器中,這個(gè)容器控件被稱為QMidArea
QMidArea控件通常占據(jù)在QMainWindow對(duì)象的中央位置,子窗口在這個(gè)區(qū)域是QMdiSubWindow類的實(shí)例,可以設(shè)置任何QWidget作為子窗口對(duì)象的內(nèi)部控件,子窗口在MDI區(qū)域進(jìn)行級(jí)聯(lián)排列布局
?參考鏈接:
PyQt5高級(jí)界面控件之QMidArea(九)_jia666666的博客-CSDN博客_pyqt5 qmdiareahttps://blog.csdn.net/jia666666/article/details/81670569
?
?7、dock widget
該控件是一個(gè)窗口,可以吸附在主窗口的四邊內(nèi),也可以懸浮在主窗口外。
QDockWidget是一個(gè)可以停靠在QMainWindow內(nèi)的窗口控件,它可以保持在浮動(dòng)狀態(tài)或者在指定位置作為子窗口附加到主窗口中,QMainWindow類的主窗口對(duì)象保留有一個(gè)用于停靠窗口的區(qū)域,這個(gè)區(qū)域在控件的中央周圍
7.1 懸浮狀態(tài)
?7.2 吸附狀態(tài)
?參考:
PyQt5高級(jí)界面控件之QDockWidget(八)_jia666666的博客-CSDN博客https://blog.csdn.net/jia666666/article/details/81669995
總結(jié)
以上是生活随笔為你收集整理的【pyqt5学习】——containers相关控件(tab widget、scroll area、stack widget、tool box、MDI area、dock widget)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转发)详解汽车UDS诊断协议(一)
- 下一篇: Servlet跳转到JSP页面后的路径问