PySetTerminal
Shared PySide6 terminal migrated from PySetTerminal-master/pysetterminal.
- Standalone entry point:
python -m pysetterminalwith templates/python on PYTHONPATH. - SETGUI embeds
pysetterminal.panel.ByteWorkPanelin TMS2812 / Работа с байтом. - Serial bus, macro editor, asynchronous macro execution with cancellation, PEEK/POKE and RAW console are included.
- COM transport uses QtSerialPort. Embedded operations reuse the TMS2812 connection and configured controller address.
- PEEK/POKE packet construction and response validation use the existing protocan native C ABI, with 16-bit TMS2812 values.
- Macro files are stored under the application data directory, outside the source checkout.
- The standalone launcher uses PySide6; SETGUI Windows 7 uses its existing PySide2/Qt5 compatibility layer. Frozen SETGUI builds bundle Python and Qt. Pyserial is not required. A native set-protocol runtime remains required.
build_and_clean.py is the migrated original standalone packaging helper.
Подключение «Работы с байтом» в другую вкладку
Вся панель — самостоятельный ByteWorkPanel: чтение и запись слова, HEX/BIN,
операции с шиной, макросы, PEEK/POKE и RAW. Она не требует Tms2812Tab.
Данные — 16 бит, адрес слова — 32 бита; протокол по умолчанию — TMS2812.
from pysetterminal.panel import ByteWorkPanel
from pysetterminal.rawprotocol import RawProtocol
# Сохраните протокол в объекте, который владеет соединением.
self.byte_protocol = RawProtocol()
self.byte_page = ByteWorkPanel(
self.byte_protocol,
device_address=lambda: self.controller_address.value(),
)
self.tabs.addTab(self.byte_page, "Работа с байтом")
# Подключение выполняется явным действием пользователя.
# self.byte_protocol.connect("COM3", 57600)
# Перед закрытием соединения:
# self.byte_page.stop()
# self.byte_protocol.disconnect()
В существующую компоновку панель добавляется через
layout.addWidget(self.byte_page). Фабрика
build_byte_page(protocol, **options) возвращает такой же виджет.
Параметры:
protocol— существующий протокол с методамиrequest_async,cancel_async,peek,poke,send_raw,receive_raw. Асинхронный ответ передаётся вcallback(success, result): для чтенияresult["value"], для записиresult["raw"]; ошибки — строкой. Синхронныеpeek/pokeвозвращают(success, result); чтение дополнительно содержитresult["raw_response"]["raw"]для журнала.device_address— адрес контроллера или функция, возвращающая текущий адрес; используется всеми блоками панели. Адрес фиксируется на время записи с проверкой и выполнения макроса.macros_file— отдельный JSON-файл макросов для конкретной вкладки. По умолчанию сохраняется существующее хранилище приложения.default_address,hint,initial_status— начальный адрес и тексты.start_word(write, address, value)— необязательный обработчик для вкладок, у которых уже есть очередь памяти. При чтенииvalue=None. Обработчик отвечает за чтение, проверку записи и остановку своей очереди.
Без start_word панель выполняет асинхронный запрос, а запись подтверждает
последующим чтением. Пример подключения к существующей очереди:
self.byte_page = ByteWorkPanel(
self.protocol,
device_address=lambda: self.address.value(),
start_word=lambda write, address, value: self.start_memory(
write=write, address=address, value=value),
macros_file=self.storage_dir / "byte_macros.json",
)
self.tabs.addTab(self.byte_page, "Работа с байтом")
# В обработчике ответа очереди:
self.byte_page.set_read_value(address, value)
self.byte_page.set_status("Чтение завершено")
set_status(text) показывает внешний статус. Сигнал status_changed(str)
передаёт ошибки ввода и результаты операций панели владельцу.
stop() отменяет её асинхронный обмен и макрос; внешнюю очередь памяти
останавливает владелец вкладки.
Каждому независимому соединению нужен собственный протокол. Если вкладки используют одно соединение, владелец транспорта должен запрещать одновременные запросы и маршрутизировать ответы. В SETGUI это делает существующая очередь TMS2812.