# 关键:确保Windows安装了WebView2运行时(pywebview2必需) # 下载地址:https://developer.microsoft.com/zh-CN/microsoft-edge/webview2/#download-section import sys,os,time import threading CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) '''定义供 JS 调用的 Python 函数''' class Api: """暴露给 JS 的 Python 接口类(所有方法都会被 JS 访问)""" def __init__(self): self.window = None # 保存窗口实例,用于 Python 主动调用 JS def set_window(self, window): """初始化时绑定窗口实例""" self.window = window def python_close_window(self): """JS 调用关闭窗口""" print("[Python] 收到关闭窗口请求") self.window.destroy() '''Python 主动调用 JS 函数''' def python_call_js_periodically(window): """Python 定时调用 JS 函数(模拟主动推送数据)""" count = 0 while window: count += 1 # 执行 JS 函数,传递参数 window.evaluate_js(f'js_receive_python_msg("Python主动推送:第{count}条消息")') time.sleep(3) # 每 3 秒推送一次 if count >= 5:break import webview if __name__ == '__main__': api = Api() window = webview.create_window( title='PyWebView', # 窗口标题 url=f"file:///{CURRENT_DIR}/app.html", resizable=True, # 是否允许调整窗口大小(默认 True) transparent=True, # frameless=True, # easy_drag=True, # 窗口无边框 js_api=api ) # 绑定窗口实例到 API(供异步任务调用 JS) api.set_window(window) threading.Thread(target=python_call_js_periodically, args=(window,), daemon=True).start() webview.start( private_mode=False, # WebRTC必需关闭私有模式 # debug=True, http_server=True )