server.py
python">import os
import sys
from flask import Flask, send_from_directory
if getattr(sys, "frozen", False):base_dir = sys._MEIPASS
else:base_dir = os.path.dirname(os.path.abspath(__file__))app = Flask(__name__, static_folder=os.path.join(base_dir, "vue_dist"), static_url_path="/")
@app.route("/", defaults={"path": ""})
@app.route("/<path:path>")
def catch_all(path):return app.send_static_file("index.html")if __name__ == "__main__":app.run(port=5000)
main.py
python">import os
import sys
import ctypes
import webview
import threading
from server import app
def get_resource_path(relative_path):if getattr(sys, "frozen", False):base_path = sys._MEIPASSelse:base_path = os.path.dirname(os.path.abspath(__file__))return os.path.join(base_path, relative_path)
def set_window_icon(window, icon_path):try:icon_handle = ctypes.windll.user32.LoadImageW(0, icon_path, 1, 0, 0, 0x00000010)if not icon_handle:raise Exception("Failed to load icon")hwnd = webview.windows[0]._window_handlectypes.windll.user32.SendMessageW(hwnd, 0x0080, 0, icon_handle) except Exception as e:print(f"Error setting window icon: {e}")
def run_server():app.run(port=5000)if __name__ == "__main__":server_thread = threading.Thread(target=run_server)server_thread.daemon = Trueserver_thread.start()icon_path = get_resource_path("vue_dist/favicon.ico")window = webview.create_window("易聪云科技", url="http://localhost:5000", width=1024, height=768, resizable=True, )webview.start()set_window_icon(window, icon_path)
vue_dist 是vue项目打包后的dist目录,放在跟main.py同级目录下
打包命令:pyinstaller --onefile --windowed main.py --add-data “vue_dist;vue_dist”