实验任务折叠管理

这段代码定义了一个可折叠的对话框组件,允许用户在 PyQt6 应用程序中添加和管理可折叠的部分。主要组件包括 SectionExpandButton 类和 CollapsibleDialog 类,它们协同工作以实现可折叠部分的创建和管理。

概述

这段代码定义了一个可折叠的对话框组件,允许用户在 PyQt6 应用程序中添加和管理可折叠的部分。主要组件包括 SectionExpandButton 类和 CollapsibleDialog 类,它们协同工作以实现可折叠部分的创建和管理。

主要组件

SectionExpandButton

SectionExpandButton 类继承自 QPushButton,用于创建一个可以展开或折叠其关联部分的按钮。

主要方法和属性
  • 初始化方法 __init__

    • 接受参数:item(关联的部分项)、text(按钮文本)、parent(父组件)。
    • 设置按钮的初始文本,并连接点击事件到 on_clicked 方法。
  • on_clicked 方法

    • 处理按钮的点击事件,切换关联部分的展开或折叠状态。
    • 如果部分是展开的,则将其折叠;如果是折叠的,则将其展开。

CollapsibleDialog

CollapsibleDialog 类继承自 QDialog,用于创建一个包含可折叠部分的对话框。

主要方法和属性
  • 初始化方法 __init__

    • 创建并配置一个 QTreeWidget 以隐藏标题,并将其添加到对话框的布局中。
    • 设置树的缩进为 0。
  • add_section 方法

    • 接受参数:title(部分的标题)、widget(部分的内容部件)。
    • 调用 add_button 方法创建一个按钮,并调用 add_widget 方法将内容部件添加为按钮的子项。
  • define_sections 方法

    • 定义并添加对话框中的所有部分。
    • 示例实现中,创建了一个包含两个标签的 QFrame 部件,并将其添加到部分中。
  • add_button 方法

    • 接受参数:title(部分的标题)。
    • 创建一个 QTreeWidgetItem 项,并将其添加为树的顶级项。
    • 创建一个 SectionExpandButton 按钮,将其设置为项的部件,并返回该项。
  • add_widget 方法

    • 接受参数:button(按钮项)、widget(部分的内容部件)。
    • 创建一个 QTreeWidgetItem 项,将其设置为按钮项的子项,并将内容部件设置为子项的部件。

使用场景

这个组件可以用于需要包含多个可折叠部分的对话框的应用程序,例如设置对话框、信息面板等。通过扩展 CollapsibleDialog 类并重写 define_sections 方法,可以轻松定义和管理对话框中的各个部分。

示例

下面是一个示例,展示如何使用 CollapsibleDialogSectionExpandButton 类:

import sys
from PyQt6.QtWidgets import QApplication

class MyCollapsibleDialog(CollapsibleDialog):
    def define_sections(self):
        widget1 = QFrame(self.tree)
        layout1 = QHBoxLayout(widget1)
        layout1.addWidget(QLabel("Content 1"))
        self.add_section("Section 1", widget1)
        
        widget2 = QFrame(self.tree)
        layout2 = QHBoxLayout(widget2)
        layout2.addWidget(QLabel("Content 2"))
        self.add_section("Section 2", widget2)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    dialog = MyCollapsibleDialog()
    dialog.define_sections()
    dialog.show()
    sys.exit(app.exec())

在这个示例中,MyCollapsibleDialog 类继承自 CollapsibleDialog 并重写了 define_sections 方法,定义了两个可折叠部分。运行此代码将显示一个包含两个可折叠部分的对话框。