modify: webview插件入口
This commit is contained in:
@@ -1,90 +0,0 @@
|
||||
from PySide6.QtCore import QObject, Slot, Signal, QTimer
|
||||
from PySide6.QtWebChannel import QWebChannel
|
||||
import time
|
||||
|
||||
class WebviewBridge(QObject):
|
||||
"""Webview桥接类,用于处理前端和Python后端之间的通信"""
|
||||
|
||||
# 定义信号
|
||||
time_updated = Signal(str)
|
||||
message_received = Signal(str)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.frontend_ready = False
|
||||
self.timer = QTimer()
|
||||
self.timer.timeout.connect(self.send_time)
|
||||
|
||||
@Slot()
|
||||
def on_frontend_ready(self):
|
||||
"""当前端准备就绪时调用"""
|
||||
print("Frontend is ready")
|
||||
self.frontend_ready = True
|
||||
# 启动定时器,每秒更新一次时间
|
||||
self.timer.start(1000)
|
||||
|
||||
@Slot(str, result=str)
|
||||
def hello(self, message):
|
||||
"""处理前端发送的消息"""
|
||||
print('Message received from frontend:', message)
|
||||
response = f'Hello from Python: {message}'
|
||||
self.message_received.emit(response)
|
||||
return response
|
||||
|
||||
def send_time(self):
|
||||
"""定期向前端发送时间更新"""
|
||||
if self.frontend_ready:
|
||||
current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
|
||||
self.time_updated.emit(current_time)
|
||||
return current_time
|
||||
return None
|
||||
|
||||
def set_frontend_ready(self, ready=True):
|
||||
"""设置前端准备状态"""
|
||||
self.frontend_ready = ready
|
||||
|
||||
class WebviewController(QObject):
|
||||
"""Webview控制器类,负责管理Webview的逻辑"""
|
||||
|
||||
def __init__(self, web_engine_page, parent=None):
|
||||
super().__init__(parent)
|
||||
self.page = web_engine_page
|
||||
self.bridge = WebviewBridge()
|
||||
self.channel = QWebChannel()
|
||||
self.channel.registerObject('py', self.bridge)
|
||||
self.page.setWebChannel(self.channel)
|
||||
|
||||
# 连接bridge的信号
|
||||
self.bridge.time_updated.connect(self.on_time_updated)
|
||||
self.bridge.message_received.connect(self.on_message_received)
|
||||
|
||||
def on_time_updated(self, time_str):
|
||||
"""当bridge发出time_updated信号时调用"""
|
||||
print(f"Time updated: {time_str}")
|
||||
# 调用前端的update_time函数
|
||||
js_code = f"""
|
||||
try {{
|
||||
if (typeof update_time !== 'undefined' && typeof update_time === 'function') {{
|
||||
update_time('{time_str}');
|
||||
}}
|
||||
}} catch (e) {{
|
||||
console.error('Error calling update_time:', e);
|
||||
}}
|
||||
"""
|
||||
self.page.runJavaScript(js_code)
|
||||
|
||||
def on_message_received(self, message):
|
||||
"""当bridge发出message_received信号时调用"""
|
||||
print(f"Message received: {message}")
|
||||
# 调用前端的消息处理函数
|
||||
js_code = f"""
|
||||
try {{
|
||||
if (typeof app_sendMessage !== 'undefined' && typeof app_sendMessage === 'function') {{
|
||||
app_sendMessage('{message}');
|
||||
}}
|
||||
}} catch (e) {{
|
||||
console.error('Error calling app_sendMessage:', e);
|
||||
}}
|
||||
"""
|
||||
self.page.runJavaScript(js_code)
|
||||
|
||||
Reference in New Issue
Block a user