56 lines
1.6 KiB
Markdown
56 lines
1.6 KiB
Markdown
# Python-MVVM
|
||
|
||
这是一个用 Python 实现的极简 MVVM 示例项目。它通过“发布-订阅”模式实现
|
||
Model 与 View 的数据绑定,并用 PyQt5 做了一个日志窗口 demo。
|
||
|
||
## 项目结构
|
||
|
||
```text
|
||
Python-MVVM-master/
|
||
├── framework.py # 可单独复制使用的 MVVM 小框架
|
||
├── demo/
|
||
│ ├── start_up.py # demo 程序入口
|
||
│ ├── design/
|
||
│ │ ├── main_win.ui # Qt Designer 原始界面文件
|
||
│ │ └── main_win.py # 由 .ui 生成的 Python 界面代码
|
||
│ └── mvvm/
|
||
│ ├── framework.py # demo 内使用的框架代码
|
||
│ ├── model.py # Model 层
|
||
│ ├── view.py # View 层
|
||
│ ├── view_model.py # ViewModel 层
|
||
│ └── binder.py # 绑定 View 与 ViewModel
|
||
└── docs/
|
||
└── MVVM学习教程.md # 详细学习文档/课件
|
||
```
|
||
|
||
## 运行 demo
|
||
|
||
进入 `demo` 目录运行:
|
||
|
||
```bash
|
||
python start_up.py
|
||
```
|
||
|
||
如果提示缺少 PyQt5,需要先安装:
|
||
|
||
```bash
|
||
pip install PyQt5
|
||
```
|
||
|
||
## 核心思想
|
||
|
||
MVVM 的目标是让 View 不直接处理业务逻辑,让 ViewModel 不直接操作界面控件。
|
||
本项目中,一次按钮点击的大致流程是:
|
||
|
||
```text
|
||
用户点击按钮
|
||
-> PyQt clicked 信号
|
||
-> ViewModel.event_log_yes/event_log_no
|
||
-> 修改 StringModel.value
|
||
-> Model 发布 log_to_view 事件
|
||
-> EventChannel 分发事件
|
||
-> LogView.signal_proxy 刷新 QTextBrowser
|
||
```
|
||
|
||
详细讲解见 [docs/MVVM学习教程.md](docs/MVVM学习教程.md)。
|