
Полная версия:
От датчика до интерфейса. Практическое руководство по созданию инженерных десктоп приложений на Python и web-технологиях
Обработка ошибок
Python-исключения передаются в JavaScript как ошибки Promise:

Рис. 37. Python-исключения передаются в JavaScript как ошибки Promise

Рис. 38. Python-исключения передаются в JavaScript как ошибки Promise (продолжение)
6.3. Передача сложных данных
Eel поддерживает все типы, которые можно сериализовать в JSON:

Рис. 39. Eel поддерживает все типы, которые можно сериализовать в…
Пример: передача словаря

Рис. 40. Пример: передача словаря

Рис. 41. Пример: передача словаря (продолжение)
Пример: передача списка данных для графика

Рис. 42. Пример: передача списка данных для графика

Рис. 43. Пример: передача списка данных для графика (продолжение)
6.4. Вызов JavaScript из Python
Иногда нужно обновить интерфейс из Python — например, при поступлении новых данных с датчика.
Базовый пример

Рис. 44. Базовый пример

Рис. 45. Базовый пример (продолжение)
Важно. JS-функции, вызываемые из Python, должны быть глобальными (в window). Не используйте const или let — только function или window.functionName.
6.5. Асинхронность: как не заблокировать UI
Это самая важная тема для инженерных приложений.
Проблема: блокировка при чтении COM-порта
Представьте, что вы читаете данные с Arduino:

Рис. 46. Представьте, что вы читаете данные с Arduino
Что происходит:
Пользователь нажимает «Читать данные»
Python ждёт ответ от Arduino (может занять секунды)
Интерфейс зависает — нельзя нажать другие кнопки
Через несколько секунд UI обновляется
Решение. threading для фоновых задач
Используйте отдельный поток для долгих операций:

Рис. 47. Используйте отдельный поток для долгих операций

Рис. 48. Используйте отдельный поток для долгих операций (продолжение)

Рис. 49. Используйте отдельный поток для долгих операций (продолжение)

Рис. 50. Используйте отдельный поток для долгих операций (продолжение)
Преимущества подхода:
UI остаётся отзывчивым — можно нажимать кнопки во время чтения
Данные обновляются в реальном времени — каждая строка сразу отображается
Можно остановить чтение — кнопка «Стоп» работает мгновенно
Ошибки обрабатываются корректно — не ломают приложение
6.6. Режим эмуляции: тестирование без железа
Вспомните про DEBUG_MODE из ваших проектов. Вот как это работает в контексте асинхронности:

Рис. 51.

Рис. 52. Режим эмуляции: тестирование без железа (продолжение)

Рис. 53. Режим эмуляции: тестирование без железа (продолжение)
Совет. Внедряйте режим эмуляции с первого дня разработки. Это сэкономит часы отладки, когда Arduino нет под рукой.
6.7. Обработка ошибок на обеих сторонах
Python → JavaScript

Рис. 54. Python → JavaScript

Рис. 55. Python → JavaScript (продолжение)
JavaScript → Python

Рис. 56. JavaScript → Python

Рис. 57. JavaScript → Python (продолжение)
6.8. Частые ошибки и решения

Рис. 58.
Что мы узнали?
Вызов Python из JS: await eel.function_name(args)() — две пары скобок обязательны.
Вызов JS из Python: eel.js_function()() — функция должна быть глобальной.
Передача данных: Поддерживаются все JSON-сериализуемые типы (списки, словари).
Асинхронность: Долгие операции (COM-порт, файлы) — только в threading.
Режим эмуляции: Тестируйте без железа с DEBUG_MODE.
Обработка ошибок: Возвращайте статус success/error в словаре.
Чек-лист. Практическое задание
Создайте приложение «Монитор температуры»:
1.a. Кнопка «Подключиться» — выбирает порт или «EMULATOR».
1.b. Кнопка «Начать чтение» — запускает фоновый поток.
1.c. Кнопка «Стоп» — останавливает чтение.
1.d. Текстовое поле — показывает последние данные.
Реализуйте режим эмуляции:
2.a. Добавьте DEBUG_MODE = True в начало main.py.
2.b. Создайте функцию emulate_data() с генерацией случайной температуры.
2.c. Убедитесь, что приложение работает без Arduino.
Добавьте обработку ошибок:
3.a. Что будет, если порт занят?
3.b. Что будет, если пользователь нажмёт «Стоп» до «Начать»?
3.c. Реализуйте проверки и покажите понятные сообщения.
Поэкспериментируйте с данными:
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.
Вы ознакомились с фрагментом книги.
Для бесплатного чтения открыта только часть текста.
Приобретайте полный текст книги у нашего партнера:
Полная версия книги
Всего 10 форматов

