我 的 个 人 主 页: 失心疯的个人主页
入 门 教 程 推 荐 : Python零基础入门教程合集
虚 拟 环 境 搭 建 : Python项目虚拟环境(超详细讲解)
PyQt5 系 列 教 程: Python GUI(PyQt5)文章合集
Oracle数据库教程: Oracle数据库文章合集
优 质 资 源 下 载 : 资源下载合集
描述
QSplitter是一个特殊的布局管理器,它可以动态地拖动子控件之间的边界,允许用户通过拖动子控件之间的边界来控制它们的大小,任何数量的小部件都可以由单个拆分器控制,是一个动态的布局管理器。QSplitter类实现了分离器,分离器用于分离部件,用户可通过拖动部件之间的分界线来调整子部件的大小继承自:QFrame
效果图

功能作用
构造函数QSplitter(parent) # 创建QSplitter对象的同时设置父控件 QSplitter(Qt.Orientation, parent) # 创建指定布局方向QSplitter对象的同时设置父控件 # 参数 Qt.Orientation # Qt.Horizontal # 水平方向 # Qt.Vertical # 垂直方向 12345 布局方向
setOrientation(Qt.Orientation) # 设置布局管理器布局方向 # 参数 Qt.Orientation # Qt.Horizontal # 水平方向 # Qt.Vertical # 垂直方向 1234 管理器大小
resize(int) # 设置QSplitter管理器大小 sizes(self) -> QSize # 获取QSplitter管理器的大小 12 小部件大小
setSizes(list: Iterable[int]) # 设置QSplitter管理器小部件的初始大小 # 需要在添加子控件之后设置才有效 saveState() # 保存小部件大小 restoreState() # 恢复小部件的大小 12345 小部件拉伸系数
setStretchFactor(index, stretch) # 给指定索引小部件设置拉伸因子系数 # 小部件的宽度则为控件宽度*拉伸系数 12 子控件操作
addWidget(QWidget) # 添加控件到QSplitter管理器的布局中 insertWidget(index, QWidget) # 根据指定索引将控件插入到QSplitter管理器的布局中 replaceWidget(index, QWidget) -> QWidget # 将指定索引位置控件替换为指定控件 widget(index) -> QWidget # 获取指定索引位置子控件 1234567 获取子控件索引
indexOf(QWidget) -> int # 获取指定控件在QSplitter管理器中的索引 1 子控件数量
count() # 获取QSplitter管理器中子控件的数量 1 子控件大小调整
setOpaqueResize(bool) # 设置子控件是否跟随QSplitter管理器子部件大小调整 # 设置为False时,仅在调整大小操作结束时调整子控件的大小 12
可用信号
splitterMoved(pos: int, index: int) # 小部件边框移动时发射该信号,传递边框前小部件尺寸和边框后小部件索引 1 Qt Designer中如何添加QSplitter
在Qt Designer(设计器)的控件工具箱中并没有QSplitter这个控件
添加QSplitter步骤
1、同时选中需要被添加到QSplitter分割器中的控件(需要同时选中)
2、鼠标右键 ——> 布局 ——> 使用分裂器水平/垂直布局

也可以使用工具栏中的 使用分裂器水平/垂直布局 工具

注意事项
【使用分裂器水平/垂直布局】选项是灰的无法点击,原因有二点
只选中了一个控件,需要同时选中多个控件 所选中控件的父控件,已经有布局了,需要先打破父控件的布局 代码示例示例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_()) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 示例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_()) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051