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.VerticalQt.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())
posted @   星光映梦  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示