18. 分割器控件

一、分割器控件

  分割器控件 QSplitter 中可以加入多个控件,在两个相邻的控件之间自动用一个分隔条把这两个控件分开,可以拖拽分割条改变它的位置。分割器可以分为水平分割和竖直分割两种,分割器中还可以加入其他分割器,这样形成多级分割。

  只能往分割器中加控件,不能直接加布局。在往窗体或布局中添加分割器控件时,应以控件形式而不能以布局形式加入,因此应该将分割器当成控件而不是布局。

  我们可以在终端中使用 pip 安装 PySide6 模块。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载

pip install pyside6 -i https://mirrors.aliyun.com/pypi/simple

  国内常用的 pip 下载源列表:

  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函数确保主循环安全结束
posted @ 2025-01-06 19:10  星光映梦  阅读(134)  评论(0)    收藏  举报