# Общая консоль Qt `set_devices.qt_ports.console.ConsoleView` — общий порт представления для журналов SETGUI. Он не управляет портами, опросом и отправкой команд. Приложение → `ConsoleView` → Qt 6 / Qt 5. Протокольные декодеры передают готовые подписи и необязательные исходные байты; консоль не вычисляет CRC. | Файл | Назначение и зависимости | |---|---| | `set_devices/qt_ports/console.py` | Виджет и файловый экспорт; stdlib и PySide6 либо PySide2 | | `examples/console_examples.py` | По одному примеру служебной консоли, CAN и RS485; действующие кодеки templates | | `tests/test_console.py` | Проверки истории, паузы, фильтров, очистки и UTF-8; pytest и Qt | ## Возможности, собранные из журналов SETGUI | Возможность | Источник / поведение общего компонента | |---|---| | Очистка | Канальные консоли платы, TX/RX, Modbus; удаляет также скрытые строки и очередь обновления | | Пауза | Эмуляторы CAN; экран заморожен, история продолжает принимать данные до заданного предела | | TX/RX | Диагностика и эмуляторы; служебные ошибки без направления остаются видны | | Автопрокрутка | Мониторы CAN и RS; её можно отключить для чтения истории | | Цвета | Консоль платы и монитор шины; сохраняются при переразборе фильтра | | HEX/ASCII | Диагностика RS; формат применяется к явно переданному payload | | Сохранение | Мониторы CAN и RS; экспорт фактически видимого текста в UTF-8 | | Поиск, копирование, перенос, масштаб | Общие инструменты всех подключённых текстовых журналов | ## Подключение ```python from set_devices.qt_ports.console import ConsoleView # Подключаем общий порт представления templates. console = ConsoleView(limit=4000, payloads=True) # Храним не более 4000 строк, включая скрытые и поступившие на паузе. layout.addWidget(console.panel, 1) # В layout вставляется контейнер с инструментами и редактором. console.append_message("RX ответ", direction="RX", payload=b"OK") # Передаём готовую подпись и байты без повторного разбора протокола. console.append_message("Ошибка связи", color="#ff7b7b") # Служебная ошибка остаётся видна при выключенных TX и RX. console.userCleared.connect(clear_frame_history) # Отдельный буфер кадров очищается тем же пользовательским действием. ``` Старые вызовы `appendPlainText`, `appendHtml`, `setPlainText`, `clear`, `toPlainText` и `setMaximumBlockCount` поддерживаются. `setPlainText` заменяет снимок истории, учитывая текущую паузу. Для внешней истории кадров подключите `userCleared`: программный `clear()` повторно этот сигнал не испускает. `directions=False` скрывает встроенные флажки, если приложение уже имеет свои фильтры TX/RX. `payloads=True` показывает форматы HEX/ASCII. События должны поступать в GUI-потоке Qt, как при работе с обычным `QPlainTextEdit`. При заполнении история обновляет экран пачками с интервалом 100 мс. Количество строк на панели относится ко всей ограниченной истории. На паузе сохранение и копирование используют замороженный видимый экран. ## Три запускаемых примера Из каталога `python`, с установленными зависимостями `.[qt]`: ```powershell python examples/console_examples.py --kind service python examples/console_examples.py --kind can python examples/console_examples.py --kind rs485 ``` Без `--kind` открываются все три примера. Аппаратура не требуется. В каждом примере можно проверить очистку, паузу, поиск, TX/RX, экспорт, копирование, автопрокрутку, перенос и масштаб; в CAN и RS485 — HEX/ASCII. Используется в SETGUI: CAN/RS485 и служебная консоль ESP, журналы соединения и TX/RX, эмуляторы CAN, CAN FD, Modbus, диагностика ПМ35 и ТМС2812, спектр и логический анализатор Altera.