18. 分割器控件
一、分割器控件
分割器控件 QSplitter
中可以加入多个控件,在两个相邻的控件之间自动用一个分隔条把这两个控件分开,可以拖拽分割条改变它的位置。分割器可以分为水平分割和竖直分割两种,分割器中还可以加入其他分割器,这样形成多级分割。
只能往分割器中加控件,不能直接加布局。在往窗体或布局中添加分割器控件时,应以控件形式而不能以布局形式加入,因此应该将分割器当成控件而不是布局。
我们可以在终端中使用 pip
安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip
指令后通过 -i
指定国内镜像源下载。
pip install pyside6 -i https://mirrors.aliyun.com/pypi/simple
国内常用的 pip
下载源列表:
- 阿里云 https://mirrors.aliyun.com/pypi/simple
- 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple
- 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple
- 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple
QSplitter
继承自 QFrame
。用 QSplitter
类创建实例对象的方法如下所示:
QSplitter(parent:QWidget=None)
QSplitter(orientation:Qt.Orientation, Qt.parent:QWidget=None)
其中 parent
是 窗口 或 容器 控件。参数 orientation
用来指定 分割方向,它是 Qt.Orientation
类型的枚举值,可以取值如下:
Qt.Orientation.Horizontal
Qt.Orientation.Vertical
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恢复状态
分割器控件 QSplitter
只有一个信号 splitterMoved(pos:int,index:int)
,当 分隔条移动时发送信号,信号的参数是 分割条的位置和索引值。
splitterMoved(pos:int, index:int) # 当分隔条移动时发送信号
我们新建一个 ui.py 文件,用来存放 UI 相关的代码。
from PySide6.QtWidgets import QWidget
from PySide6.QtWidgets import QTextEdit
from PySide6.QtWidgets import QHBoxLayout, QSplitter
from PySide6.QtCore import Qt
class MyUi:
def setupUi(self, window:QWidget):
window.resize(800, 600) # 1.设置窗口对象大小
layout = QHBoxLayout(window) # 2.创建水平局部控件
textEdit1 = QTextEdit() # 3.创建文本框控件
textEdit2 = QTextEdit()
textEdit3 = QTextEdit()
textEdit4 = QTextEdit()
horizontal_spliter = QSplitter() # 4.创建分割器控件
vertical_spliter = QSplitter()
horizontal_spliter.setOrientation(Qt.Orientation.Horizontal) # 5.设置分割器控件的分割方向
vertical_spliter.setOrientation(Qt.Orientation.Vertical)
horizontal_spliter.addWidget(textEdit1) # 6.向分割器中添加控件
horizontal_spliter.insertWidget(1, textEdit2)
vertical_spliter.insertWidget(0, textEdit3)
vertical_spliter.addWidget(textEdit4)
layout.addWidget(horizontal_spliter)
layout.addWidget(vertical_spliter)
horizontal_spliter.setOpaqueResize(True) # 7.设置拖动分割条时,是否是动态的
horizontal_spliter.setHandleWidth(2) # 8.设置分割条的宽度
vertical_spliter.setHandleWidth(2)
我们新建一个 widget.py 文件,用来存放业务逻辑相关的代码。
import sys
from PySide6.QtWidgets import QApplication, QWidget
from ui import MyUi
class MyWidget(QWidget):
def __init__(self):
super().__init__() # 1.调用父类Qwidget类的__init__()方法
self.__ui = MyUi()
self.__ui.setupUi(self) # 2.初始化页面
if __name__ == "__main__":
app = QApplication(sys.argv) # 1.创建一个QApplication类的实例
window = MyWidget() # 2.创建一个窗口
window.show() # 3.显示窗口
sys.exit(app.exec()) # 4.进入程序的主循环,并通过exit函数确保主循环安全结束