client/bridge.py

53 lines
1.8 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
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})