python pywebview + vue3 做桌面端
Api.py
# 传给前端的api对象, 定义了一个可以通过js调用退出当前应用的函数
class Api:
def __init__(self) -> None:
self._window = None
# java运行的线程
self.process = None
def set_process(self, _process):
self.process = _process
def set_window(self, window):
self._window = window
def quit(self):
print("窗口即将关闭,用户正在选择中!")
self._window.destroy()
def change_size(self, width, height):
print(f"Changing window size to {width}x{height}")
self._window.size = (width, height)
def change_opacity(self, opacity):
print(f"Changing window opacity to {opacity}")
self._window.opacity = opacity
def change_background_color(self, color):
print(f"Changing window background color to {color}")
self._window.background_color = color
Client.py
app = Flask(__name__, static_folder='templates/assets')
@app.route('/')
def index():
try:
return render_template('index.html')
except TemplateNotFound:
abort(404)
class Client:
def __init__(self):
# 配置pywebview关闭提示的中文翻译
self.chinese = {
'global.quitConfirmation': u'确定关闭?',
}
self.api = None
def open_web(self):
try:
# 实例化Api类
self.api = Api()
self.api.set_process(self.process)
window = webview.create_window(
title='我是窗口的标题',
url=app,
maximized=True, # 以全屏模式启动
# frameless=True, # 无边框显示
# resizable=False, # 固定窗口大小
text_select=False, # 禁止选择文字内容
confirm_close=True, # 关闭时提示
js_api=self.api, # 将上面实例化后的Api对象传给前端js调用
focus=True,
on_top=True)
window.events.closed += self.on_web_closing
# --划重点--务必记得需要将上面创建的window对象再通过函数传给实例化后的api对象
self.api.set_window(window)
# 启动程序
webview.start(deactivate, window, localization=self.chinese)
except Exception as e:
print(f"Error opening web view: {e}")
def on_web_closing(self):
print('窗口已确认关闭!')
Main.py
if __name__ == '__main__':
Client().open_web()
其中app是flask的对象,也可以是一个具体的远程界面地址,也可以是本地的html路径,自己觉得使用哪个
使用app时还需要写一个前端调用接口的路由跳转哦,篇幅有限,请各位自行百度把!