Files
help_lab/README.md
T
2026-05-05 22:36:17 +05:00

211 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Вот подробный **README.md** для вашего проекта:
```markdown
# Калькулятор питательных сред
Программа для расчёта состава питательных сред с поддержкой разбавленных реагентов.
## 📋 Функционал
- **Расчёт состава среды** по процентному содержанию компонентов
- **Поддержка разных единиц измерения** (нг, мкг, мг, г, кг, нл, мкл, мл, л)
- **Коэффициент пересчёта** для каждого реагента (например, для перевода объёма в массу)
- **Разбавление реагентов** — возможность указать, во сколько раз разбавлен исходный реактив
- **Автоматический расчёт растворителя** с учётом объёма вносимых разбавленных реагентов
- **Сохранение и загрузка** состава в JSON-файл
- **Интерактивная таблица** с возможностью добавления/удаления реагентов
## 🚀 Установка и запуск
### Требования
- Python 3.6 или выше
- PyQt5
### Установка зависимостей
```bash
pip install PyQt5
```
### Запуск программы
```bash
python main.py
```
## 📖 Использование
### Основные параметры
1. **Общее количество** — конечный объём/масса готовой среды
2. **Единица измерения** — нл, мкл, мл, л
3. **Растворитель** — название растворителя (отображается в первой строке таблицы)
### Таблица реагентов
| Колонка | Описание |
|---------|----------|
| Название | Имя реагента |
| % | Процентное содержание в конечной среде |
| Единица | В каких единицах измеряется реагент |
| Коэфф. | Коэффициент пересчёта (например, для перевода объёма в массу) |
| Разбавление (x) | Во сколько раз разбавлен исходный реактив (1 = не разбавлен) |
| Нужно взять (разб.) | Рассчитанное количество разбавленного реагента |
### Пример расчёта
**Задача:** Приготовить 100 мл питательной среды с 10% соли.
**Вариант 1 — соль не разбавлена:**
- Разбавление = 1
- Нужно взять: 10 г соли
- Растворителя: 100 мл
**Вариант 2 — есть 10-кратно разбавленная соль:**
- Разбавление = 10
- Нужно взять: 1 мл разбавленной соли (10 г / 10)
- Растворителя: 99 мл (100 мл - 1 мл)
## 🧠 Особенности реализации
### Расчёт растворителя
**Важное примечание:** При расчёте объёма растворителя учитываются только те реагенты, которые заданы в **объёмных единицах** (нл, мкл, мл, л). Реагенты в **единицах массы** (нг, мкг, мг, г, кг) считаются не имеющими объёма и не влияют на расчёт растворителя.
Это сделано потому, что:
1. Массовые реагенты обычно добавляются в твёрдом виде и их объём пренебрежимо мал
2. Для корректного учёта объёма твёрдых веществ потребовалась бы плотность
```python
# Пример из model.py
if is_volume:
# Реагент в объёмных единицах — учитываем его объём
reagent_volume_base = diluted_amount * VOLUME_UNITS[reagent.unit]
else:
# Реагент в массовых единицах — не учитываем (объём = 0)
reagent_volume_base = 0
```
### Алгоритм расчёта
1. **Расчёт неразбавленного состава**
- Количество чистого вещества = (процент / 100) × общий объём
2. **Пересчёт с учётом разбавления**
- Количество разбавленного реагента = чистое вещество / фактор разбавления
3. **Расчёт объёма вносимых реагентов**
- Для объёмных реагентов: объём = количество разбавленного реагента
- Для массовых реагентов: объём = 0
4. **Расчёт растворителя**
- Объём растворителя = общий объём − сумма объёмов всех реагентов
## 📁 Структура проекта
```
nutrient_medium_pyqt/
├── main.py # Точка входа, инициализация приложения
├── controller.py # Контроллер — связь между моделью и представлением
├── model.py # Модель — бизнес-логика и расчёты
├── view.py # Представление — GUI на PyQt5
├── reagent.py # Класс Reagent для хранения данных
└── README.md # Документация
```
## 🔧 Описание кода
### main.py
Инициализирует QApplication, создаёт экземпляр Controller и запускает главный цикл обработки событий.
### reagent.py
```python
class Reagent:
def __init__(self, name: str, percentage: float, unit: str, conversion_factor: float = 1.0)
```
Хранит данные о реагенте:
- `name` — название
- `percentage` — процентное содержание
- `unit` — единица измерения
- `conversion_factor` — коэффициент пересчёта
- `dilution_factor` — коэффициент разбавления (добавляется динамически)
### model.py
Содержит бизнес-логику программы:
**Константы:**
```python
VOLUME_UNITS = {'нл': 0.001, 'мкл': 1.0, 'мл': 1000.0, 'л': 1000000.0}
MASS_UNITS = {'нг': 0.000001, 'мкг': 0.001, 'мг': 1.0, 'г': 1000.0, 'кг': 1000000.0}
```
**Основные методы:**
- `convert_amount()` — пересчёт между единицами измерения через базовые (мкл для объёма, мкг для массы)
- `calculate_amounts()` — главный расчётный метод
- `save_to_file()` / `load_from_file()` — сериализация в JSON
### view.py
Реализует графический интерфейс на PyQt5:
**Основные компоненты:**
- `QDoubleSpinBox` для общего количества
- `QComboBox` для выбора единиц измерения
- `QTableWidget` для таблицы реагентов (6 колонок)
- Кнопки: Добавить, Удалить, Рассчитать, Сохранить, Загрузить
**Ключевые методы:**
- `add_solvent_row()` — создаёт нередактируемую строку растворителя
- `add_new_row()` — добавляет строку реагента
- `update_results()` — обновляет результаты расчёта
- `update_solvent_result()` — обновляет количество растворителя
### controller.py
Координирует взаимодействие Model и View:
**Сигналы (слоты):**
- `add_row_btn.clicked``add_reagent_row()`
- `calculate_btn.clicked``_perform_calculation()`
- `save_btn.clicked``save_composition()`
- `load_btn.clicked``load_composition()`
**Основные методы:**
- `_update_model_from_view()` — переносит данные из таблицы в модель
- `_update_view_from_model()` — заполняет таблицу из модели
- `_perform_calculation()` — вызывает расчёт и обновляет интерфейс
## 📝 Формат JSON-файла
```json
{
"total_amount": 1000.0,
"amount_unit": "мл",
"solvent": "Вода",
"reagents": [
{
"name": "NaCl",
"percentage": 0.9,
"unit": "г",
"conversion_factor": 1.0,
"dilution_factor": 1.0
}
]
}
```
## 🤝 Вклад в проект
При обнаружении ошибок или наличии предложений создавайте Issue или Pull Request.
## 📄 Лицензия
MIT License
## 👨‍💻 Автор
Artemka
```
Этот README.md:
- ✅ Кратко описывает функционал
- ✅ Содержит примеры использования
- ✅ Объясняет важную особенность — массовые компоненты не учитываются при расчёте растворителя
- ✅ Даёт подробное описание каждого файла и класса
- 👍 Понятен как новичкам, так и опытным разработчикам