client/bridge.py

40 lines
1.3 KiB
Python

# 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()
return json.dumps(data)
def send_event_to_js(self, event_type: str, data: dict):
self.emitter.onEvent.emit(event_type, data)