【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的使用 - 知乎icon-default.png?t=LA92https://zhuanlan.zhihu.com/p/37854878

 

2、scroll area

该控件可以容纳不同的其他控件,当scroll area的大小小于contents的大小时,会出现滑条,这样就可以通过滚动滑条来查看所有scroll area中的控件,同时这也是一种适应不同分辨率电脑的方法。有些时候,我们界面能展示的区域被限定的很小,但是需要展现的控件、内容却很多,在限定大小的区域中无法全部显示。这个时候就需要滚动条了。在Qt中有一个很好的类 QScrollArea

重点是要掌握如何使得滑条出现,这里需要设置父级窗口之间的布局,达到和最高级窗口自适应的效果,如何修改scroll area下的一个子控件scrollAreaWidgetContents的最小窗口大小,当窗口小于该值时,会出现滑条。具体看下面博主的案例

 

 

[Qt]如何用好QScrollArea_祥的专栏-CSDN博客_qt scrollarea怎么用icon-default.png?t=LA92http://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 qstackedwidgeticon-default.png?t=LA92https://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 qframeicon-default.png?t=LA92https://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 qmdiareaicon-default.png?t=LA92https://blog.csdn.net/jia666666/article/details/81670569

 

 7、dock widget

该控件是一个窗口,可以吸附在主窗口的四边内,也可以悬浮在主窗口外。

QDockWidget是一个可以停靠在QMainWindow内的窗口控件,它可以保持在浮动状态或者在指定位置作为子窗口附加到主窗口中,QMainWindow类的主窗口对象保留有一个用于停靠窗口的区域,这个区域在控件的中央周围

7.1 悬浮状态

 7.2 吸附状态

 参考:

PyQt5高级界面控件之QDockWidget(八)_jia666666的博客-CSDN博客icon-default.png?t=LA92https://blog.csdn.net/jia666666/article/details/81669995

Guess you like

Origin blog.csdn.net/qq_45769063/article/details/121492249