# bridge.py import json import time from PyQt6.QtCore import QObject, QVariant, pyqtSlot, pyqtSignal, QTimer from PyQt6.QtWebChannel import QWebChannel from PyQt6.QtWebEngineWidgets import QWebEngineView from enums import KompasCommand from parser.main import KompasDocumentParser class PythonEventEmitter(QObject): onEvent = pyqtSignal(str, "QVariantMap") # событие: тип + данные class PythonJSBridge(QObject): def __init__(self, browser: QWebEngineView): super().__init__() self.browser = browser self.channel = QWebChannel() self.browser.page().setWebChannel(self.channel) self.emitter = PythonEventEmitter() self.channel.registerObject("pyjs", self) self.channel.registerObject("pyjs_events", self.emitter) self.kompas = KompasDocumentParser() @pyqtSlot(str, str, result=str) def callFromJS(self, command: str, data_json: str): print(f"[Python] Получена команда: {command}") data = None if command == KompasCommand.OPEN_KOMPAS: data = self.kompas.get_open_documents() if command == KompasCommand.GET_AVAILABLE_ACTIONS: data = self.kompas.get_available_actions() if command == KompasCommand.IGES: data = self.kompas.save_to_iges() if command == KompasCommand.EXPORT_RASTER: data = self.kompas.export_to_raster() if command == KompasCommand.PROJECT_SUPPORT: data = self.kompas.create_drawing_for_parts() if command == KompasCommand.STATS: data = self.kompas.collect_statistics() return json.dumps(data, ensure_ascii=False) def send_event_to_js(self, event_type: str, data: dict): self.emitter.onEvent.emit(event_type, data)