Metadata-Version: 2.4
Name: calculator_ui
Version: 0.1.0
Summary: A calculator ui
Home-page: https://github.com/yuanhao/calculator_ui
Author: mine
Author-email: mine@example.com
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: typing
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# Calculator UI

基于 Python 与 Tkinter 的图形化计算器，采用面向对象设计，将**计算逻辑**与**界面展示**分离为独立类，并支持鼠标与键盘操作。

## 功能特性

- 四则运算：`+`、`-`、`×`、`÷`
- 小数输入、取反（±）、百分号（%）
- 全部清除（C）、清除当前输入（CE）、退格（⌫）
- 除零等异常时显示错误提示
- 深色主题界面
- 完整键盘快捷键支持

## 环境要求

- Python 3.10 及以上
- 标准库 [tkinter](https://docs.python.org/3/library/tkinter.html)（Windows 安装 Python 时通常已包含；部分 Linux 需单独安装 `python3-tk`）

## 快速开始

### 直接运行

```bash
cd pip_package
python main.py
```

### 作为包安装（可选）

```bash
pip install -e .
```

安装后可在代码中引用：

```python
from calculator import CalculatorEngine, CalculatorUI

app = CalculatorUI()
app.run()
```

## 键盘快捷键

| 按键 | 功能 |
|------|------|
| `0`–`9` | 输入数字 |
| `.` | 小数点 |
| `+` `-` `*` `/` | 运算符 |
| `Enter` 或 `=` | 等于 |
| `Esc` 或 `Delete` | 全部清除（C） |
| `Backspace` | 退格 |
| `N` | 取反（±） |
| `%` | 百分号 |

## 项目结构

```
pip_package/
├── main.py                 # 程序入口
├── setup.py                # 打包配置
├── requirements.txt
├── README.md
└── calculator/
    ├── __init__.py
    ├── engine.py           # CalculatorEngine：计算逻辑
    └── ui.py               # CalculatorUI：图形界面与键盘事件
```

## 架构说明

项目遵循**关注点分离**原则：

| 类 | 文件 | 职责 |
|----|------|------|
| `CalculatorEngine` | `calculator/engine.py` | 维护显示状态、处理运算与输入，不依赖任何 GUI 库 |
| `CalculatorUI` | `calculator/ui.py` | 构建 Tkinter 窗口、绑定按钮与键盘，调用引擎并刷新显示 |

`CalculatorUI` 可接收外部传入的 `CalculatorEngine` 实例，便于单独测试计算逻辑：

```python
from calculator.engine import CalculatorEngine

engine = CalculatorEngine()
engine.input_digit("1")
engine.input_digit("2")
engine.input_operator("+")
engine.input_digit("3")
engine.calculate()
print(engine.display)  # 15
```

## 开发与打包

```bash
# 以可编辑模式安装，便于本地开发
pip install -e .

# 构建分发包
python setup.py sdist bdist_wheel
```

## 许可证

MIT License
