18. 分割器控件
一、分割器控件
分割器控件 QSplitter 中可以加入多个控件,在两个相邻的控件之间自动用一个分隔条把这两个控件分开,可以拖拽分割条改变它的位置。分割器可以分为水平分割和竖直分割两种,分割器中还可以加入其他分割器,这样形成多级分割。
只能往分割器中加控件,不能直接加布局。在往窗体或布局中添加分割器控件时,应以控件形式而不能以布局形式加入,因此应该将分割器当成控件而不是布局。
我们可以在终端中使用 pip 安装 pyside6 模块。
pip install pyside6
QSplitter 继承自 QFrame。用 QSplitter 类创建实例对象的方法如下所示:
QSplitter(parent:QWidget=None)
QSplitter(orientation:Orientation, Qt.parent:QWidget=None)
其中 parent 是 窗口 或 容器 控件;Qt.Orientation 是 分割方向,可以取 Qt.Orientation.Vertical 或 Qt.Orientation.Horizontal。
QSplitter 类的常用方法:
addWidget(widget:QWidget) -> None # 在末尾添加控件
insertWidget(index:int, widget:QWidget) -> None # 在指定位置插入控件
replaceWidget(index:int, widget:QWidget) -> None # 替换指定位置的控件
widget(index:int) -> QWidget # 获取指定位置的控件
count() -> int # 获取控件数量
indexOf(w:QWidget) -> int # 获取指定控件的索引
setOrientation(arg__1:bool) -> None # 设置分割方向
orientation() -> bool # 获取分割方向
setOpaqueResize(opaque:bool=true) -> None # 设置拖动分割条时,是否是动态的
setStretchFactor(index:int, stretch:int) -> None # 设置分割区在窗口缩放是的缩放系数
setHandleWidth(arg__1:int) -> None # 设置分割条的宽度
setChildrenCollapsible(arg__1:bool) -> None # 设置内部控件是否可以折叠,默认为True
setCollapsible(index:int, arg__2:bool) -> None # 设置索引号为index的控件是否可以折叠
setSizes(list:Sequence[int]) -> None # 使用可迭代序列设置内部控件的宽度或高度
sizes() -> Sequence[int] # 获取分割器中的控件的宽度列表或高度列表
setRubberBand(position:int) -> None # 设置橡皮筋到指定位置,如果分割条不是动态的,则会看到橡皮筋
moveSplitter(pos:int, index:int) -> None # 将索引为index的分割线移到pos处
getRange(index:int) -> int # 获取索引为index的分割线的位置范围
saveState() -> QByteArray # 保存状态到QByteArray
restoreState(state:QByteArray) -> None # 从QByteArray恢复状态
用 setOrientation(Qt.Orientation)
方法设置分割方向;用 setOpaqueResize(bool)
方法设置移动分割条时,是否是动态显示的,动态显示时控件随鼠标的移动进行缩放,非动态显示时释放鼠标后才缩放控件。用 setChildrenCollapsible(bool)
和 setCollapsible(int,bool)
方法设置控件是否是可以折叠的,在折叠情况下,两个分隔条可以合并在一起。
分割器控件 QSplitter 只有一个信号 splitterMoved(pos:int,index:int),当分隔条移动时发送信号,信号的参数是分割条的位置和索引值。
splitterMoved(pos:int,index:int) # 当分隔条移动时发送信号
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QSplitter, QTextEdit, QHBoxLayout
from PySide6.QtCore import Qt
class MyWidget(QWidget):
def __init__(self):
# 1.调用父类Qwidget类的__init__()方法
super().__init__()
# 2.调用setupUi()方法初始化页面
self.setup_ui()
def setup_ui(self):
# 1.设置窗口对象大小
self.resize(700, 500)
# 2.创建水平局部控件
layout = QHBoxLayout(self)
# 3.创建文本框控件
textEdit_1 = QTextEdit()
textEdit_2 = QTextEdit()
textEdit_3 = QTextEdit()
textEdit_4 = QTextEdit()
# 4.创建分割器控件
spliter_H = QSplitter()
spliter_V = QSplitter()
# 5.设置分割器控件的分割方向
spliter_H.setOrientation(Qt.Orientation.Horizontal)
spliter_H.setOrientation(Qt.Orientation.Vertical)
# 6.向分割器中添加控件
spliter_H.addWidget(textEdit_1)
spliter_H.insertWidget(1, textEdit_2)
spliter_V.insertWidget(0, textEdit_3)
spliter_V.addWidget(textEdit_4)
layout.addWidget(spliter_H)
layout.addWidget(spliter_V)
# 7.设置拖动分割条时,是否是动态的
spliter_H.setOpaqueResize(True)
# 8.设置分割条的宽度
spliter_H.setHandleWidth(30)
if __name__ == "__main__":
# 1.创建一个QApplication类的实例
app = QApplication(sys.argv)
# 2.创建一个窗口
window = MyWidget()
# 3.展示窗口
window.show()
# 4.进入程序的主循环并通过exit()函数确保主循环安全结束
sys.exit(app.exec())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构