项目备份
This commit is contained in:
61
app.py
Normal file
61
app.py
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
|
||||
# 关键:确保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
|
||||
)
|
||||
Reference in New Issue
Block a user