架构与项目结构
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_registry、tabs_dict 与 tabs_list 是「功能页 ↔ 标签页」的唯一来源。新增功能页必须在三处同步登记(详见《新增功能选项卡》)。
Tip
想快速了解每个模块的对外函数,请前往 API 参考。