我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 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: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_())