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

在这里插入图片描述

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

在这里插入图片描述

QSplitter 可拉伸区域分隔器控件

  • 描述

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

  • 效果图

    • 106.PyQt5_QSplitter_可拉伸区域分隔器控件_第1张图片
  • 功能作用

    • 构造函数
      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)         # 小部件边框移动时发射该信号,传递边框前小部件尺寸和边框后小部件索引
    

  • 代码示例
  • 示例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_())
    
    

你可能感兴趣的:(PyQt5,pyqt5,python,GUI,python,pyqt,qt5)