# 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 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.timer = QTimer() self.timer.timeout.connect(self.send_timer_event) self.timer.start(1000) # раз в секунду @pyqtSlot(str, str, result=str) def callFromJS(self, command: str, data_json: str): print(f"[Python] Получена команда: {command}") if command == "init": return json.dumps({"status": "ok", "message": "Инициализация завершена"}) elif command == "get_data": return json.dumps([["A1", "B1"], ["A2", "B2"]]) elif command == "get_sheets": return json.dumps(["Sheet1", "Sheet2"]) return json.dumps(None) def send_event_to_js(self, event_type: str, data: dict): self.emitter.onEvent.emit(event_type, data) def send_timer_event(self): current_time = time.strftime("%H:%M:%S") print(f"[Python] Отправка события: {current_time}") self.emitter.onEvent.emit("timer", {"time": current_time})