跳转至

架构与项目结构

CalculusCalculator 采用「纯计算层 + GUI 层」分层设计,核心计算逻辑与界面解耦,便于测试与扩展。

目录结构

CalculusCalculator/
├── run.py              # 程序入口:启动画面、语言/主题初始化、创建主窗口
├── core/               # 与界面无关的底层支撑
│   ├── sympify.py      # 字符串 → SymPy 表达式(统一输入标准)
│   ├── render.py       # LaTeX → SVG 公式渲染(QGraphicsView)
│   └── settings.py     # 语言、主题、引导标记等持久化设置
├── functions/          # 纯计算模块(不依赖 Qt)
│   ├── derivative.py   # 求导
│   ├── integral.py     # 积分
│   ├── functions.py    # 表达式变形
│   ├── simplification.py
│   ├── solvers.py      # 方程 / 不等式 / 微分方程组
│   ├── planes.py       # 平面几何
│   ├── solids.py       # 立体几何
│   ├── paint2D.py / paint3D.py  # 绘图
│   └── saves.py        # 存档 / 读档
├── ui/                 # PySide6 标签页界面
│   ├── main.py         # 主窗口 MainWindow
│   ├── __init__.py     # 选项卡登记表(懒加载)
│   └── <pinyin>.py      # 各功能页(如 qiudao.py = 求导)
├── math_input/         # 可视化公式输入(MathLive 编辑器)
├── blockly/            # 积木化可视化计算编辑器(v2.0.0)
├── i18n/               # 翻译源文件 .ts 与编译产物 .qm
└── docs/               # 本帮助文档(mkdocs,zh / en 双语)

分层职责

  • 入口层 run.py:设置 Qt 环境、预初始化 WebEngine、加载语言与主题、显示启动画面、构造主窗口,并在首次启动显示引导。
  • 核心层 core/:提供「输入解析」「公式渲染」「设置持久化」三组与界面无关的公共服务。所有功能页都依赖 core.sympify 解析输入、core.render 渲染结果。
  • 计算层 functions/:每个模块暴露纯函数(输入 SymPy 表达式 / 参数,输出 SymPy 对象或字符串),完全不依赖 Qt,可独立单元测试。
  • 界面层 ui/:每个功能对应一个 QWidget 子类(页面)。ui/__init__.py 维护「选项卡登记表」,通过 lazy_loader 懒加载,仅在创建对应标签页时才导入对应模块,加快启动。
  • 可视化输入 math_input/ / blockly/:分别提供结构化公式输入与积木化流程编辑,二者最终都转换为标准 SymPy 表达式后交由计算层处理。

数据流

用户输入 → core.sympify.sympify() → SymPy 表达式
         → functions.<module>.<func>() → SymPy 结果
         → core.render.setGraphicsView() → SVG
         → QGraphicsView(LaTeX 实时渲染)

选项卡登记表

ui/__init__.py 中的 _tab_registrytabs_dicttabs_list 是「功能页 ↔ 标签页」的唯一来源。新增功能页必须在三处同步登记(详见《新增功能选项卡》)。

Tip

想快速了解每个模块的对外函数,请前往 API 参考