106.PyQt5_QSplitter_可拉伸区域分隔器控件

在这里插入图片描述

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

在这里插入图片描述

QSplitter 可拉伸区域分隔器控件
  • 描述

    • QSplitter是一个特殊的布局管理器,它可以动态地拖动子控件之间的边界,允许用户通过拖动子控件之间的边界来控制它们的大小,任何数量的小部件都可以由单个拆分器控制,是一个动态的布局管理器。
    • QSplitter类实现了分离器,分离器用于分离部件,用户可通过拖动部件之间的分界线来调整子部件的大小
  • 继承自:QFrame

  • 效果图

    • 在这里插入图片描述
  • 功能作用

    • 构造函数
      QSplitter(parent)                       # 创建QSplitter对象的同时设置父控件
      QSplitter(Qt.Orientation, parent)       # 创建指定布局方向QSplitter对象的同时设置父控件
      # 参数 Qt.Orientation
          # Qt.Horizontal     # 水平方向
          # Qt.Vertical       # 垂直方向
      
    • 布局方向
      setOrientation(Qt.Orientation)          # 设置布局管理器布局方向
      # 参数 Qt.Orientation
          # Qt.Horizontal     # 水平方向
          # Qt.Vertical       # 垂直方向
      
    • 管理器大小
      resize(int)                             # 设置QSplitter管理器大小
      sizes(self) -> QSize                    # 获取QSplitter管理器的大小
      
    • 小部件大小
      setSizes(list: Iterable[int])           # 设置QSplitter管理器小部件的初始大小
      # 需要在添加子控件之后设置才有效
      
      saveState()                             # 保存小部件大小
      restoreState()                          # 恢复小部件的大小
      
    • 小部件拉伸系数
      setStretchFactor(index, stretch)        # 给指定索引小部件设置拉伸因子系数
      # 小部件的宽度则为控件宽度*拉伸系数
      
    • 子控件操作
      addWidget(QWidget)                      # 添加控件到QSplitter管理器的布局中
      
      insertWidget(index, QWidget)            # 根据指定索引将控件插入到QSplitter管理器的布局中
      
      replaceWidget(index, QWidget) -> QWidget    # 将指定索引位置控件替换为指定控件
      
      widget(index) -> QWidget                # 获取指定索引位置子控件
      
    • 获取子控件索引
      indexOf(QWidget) -> int                 # 获取指定控件在QSplitter管理器中的索引
      
    • 子控件数量
      count()                                 # 获取QSplitter管理器中子控件的数量
      
    • 子控件大小调整
      setOpaqueResize(bool)                   # 设置子控件是否跟随QSplitter管理器子部件大小调整
      # 设置为False时,仅在调整大小操作结束时调整子控件的大小
      
  • 可用信号

    splitterMoved(pos: int, index: int)         # 小部件边框移动时发射该信号,传递边框前小部件尺寸和边框后小部件索引
    

Qt Designer中如何添加QSplitter

  • 在Qt Designer(设计器)的控件工具箱中并没有QSplitter这个控件

  • 添加QSplitter步骤

  • 1、同时选中需要被添加到QSplitter分割器中的控件(需要同时选中)

  • 2、鼠标右键 ——> 布局 ——> 使用分裂器水平/垂直布局

    • 在这里插入图片描述
  • 也可以使用工具栏中的 使用分裂器水平/垂直布局 工具

    • 在这里插入图片描述
  • 注意事项

  • 【使用分裂器水平/垂直布局】选项是灰的无法点击,原因有二点

      1. 只选中了一个控件,需要同时选中多个控件
      1. 所选中控件的父控件,已经有布局了,需要先打破父控件的布局

  • 代码示例
  • 示例1:QSplitter-功能作用
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QSplitter-功能演示')
            self.resize(500, 300)
            self.widget_list()
    
        def widget_list(self):
            self.add_widget()
    
        def add_widget(self):
            spl = QSplitter(Qt.Horizontal, self)
            frame_1 = QFrame()
            frame_1.setFrameShape(QFrame.StyledPanel)
            texte = QTextEdit()
            texte2 = QTextEdit()
            frame_2 = QFrame()
            frame_2.setFrameShape(QFrame.StyledPanel)
    
            cmb = QComboBox()
            cmb.addItems(['湖南','湖北','广东','广西'])
            # spl.setSizes([100, 400])
    
            spl.addWidget(cmb)
            spl.addWidget(texte)
    
            # vlayout = QVBoxLayout()
            # vlayout.addWidget(spl, 1)
            # vlayout.addWidget(frame_2, 2)
            # self.setLayout(vlayout)
    
            vspl = QSplitter(Qt.Vertical, self)
            vspl.addWidget(spl)
            vspl.addWidget(frame_2)
    
            hlayout = QHBoxLayout()
            hlayout.addWidget(vspl)
            self.setLayout(hlayout)
            print(vspl.count())
    
            spl.splitterMoved.connect(lambda v1,v2: print(v1, v2))
            vspl.splitterMoved.connect(lambda v1,v2: print(v1, v2))
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
  • 示例2:QSplitter-测试
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QSplitter-测试')
            self.resize(500, 300)
            self.widget_list()
    
        def widget_list(self):
            splitter1 = QSplitter(self)
            splitter1.setOrientation(Qt.Horizontal)
            splitter2 = QSplitter(self)
            splitter2.setOrientation(Qt.Horizontal)
            splitter3 = QSplitter(Qt.Vertical, self)
    
            splitter1.resize(400, 200)
            t1 = QTextEdit()
            t2 = QTextEdit()
            t3 = QTextEdit()
            t4 = QTextEdit()
    
            splitter1.addWidget(t1)
            splitter1.addWidget(t2)
            splitter2.addWidget(t3)
            splitter2.addWidget(t4)
    
            splitter1.setSizes([400, 100])
    
            # 通过垂直布局添加两个横向QSplitter管理器,上下无法移动
            vlayout = QVBoxLayout()
            vlayout.addWidget(splitter1)
            vlayout.addWidget(splitter2)
            self.setLayout(vlayout)
    
            # 通过垂直QSplitter管理器添加
            # splitter3.addWidget(splitter1)
            # splitter3.addWidget(splitter2)
    
            print(splitter1.size())
            splitter1.splitterMoved.connect(lambda v1, v2: print(v1, v2))
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值