vue3項目使用 python +flask 打包成桌面應用

server.py

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("/")
# def index():
#     return app.send_static_file("index.html")@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

import os
import sys
import ctypes
import webview
import threading
from server import app  # 引入 Flask 應用# 獲取靜態資源路徑
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)# 設置窗口圖標(Windows 平臺)
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)  # WM_SETICONexcept Exception as e:print(f"Error setting window icon: {e}")# 啟動 Flask 服務器
def run_server():app.run(port=5000)if __name__ == "__main__":# 啟動 Flask 服務器(在后臺線程中運行)server_thread = threading.Thread(target=run_server)server_thread.daemon = Trueserver_thread.start()# 使用 PyWebView 創建桌面窗口icon_path = get_resource_path("vue_dist/favicon.ico")window = webview.create_window("易聰云科技",  # 窗口標題url="http://localhost:5000",  # 加載 Flask 提供的頁面width=1024,  # 窗口寬度height=768,  # 窗口高度resizable=True,  # 允許調整窗口大小# fullscreen=True,)# 啟動 PyWebViewwebview.start()# 設置窗口圖標set_window_icon(window, icon_path)

vue_dist 是vue項目打包后的dist目錄,放在跟main.py同級目錄下

打包命令:pyinstaller --onefile --windowed main.py --add-data “vue_dist;vue_dist”

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/75614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75614.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/75614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

后端學習day1-Spring(八股)--還剩9個沒看

一、Spring 1.請你說說Spring的核心是什么 參考答案 Spring框架包含眾多模塊&#xff0c;如Core、Testing、Data Access、Web Servlet等&#xff0c;其中Core是整個Spring框架的核心模塊。Core模塊提供了IoC容器、AOP功能、數據綁定、類型轉換等一系列的基礎功能&#xff0c;…

LeetCode 第34、35題

LeetCode 第34題&#xff1a;在排序數組中查找元素的第一個和最后一個位置 題目描述 給你一個按照非遞減順序排列的整數數組nums&#xff0c;和一個目標值target。請你找出給定目標值在數組中的開始位置和結束位置。如果數組中不存在目標值target&#xff0c;返回[-1,1]。你必須…

告別分庫分表,時序數據庫 TDengine 解鎖燃氣監控新可能

達成效果&#xff1a; 從 MySQL 遷移至 TDengine 后&#xff0c;設備數據自動分片&#xff0c;運維更簡單。 列式存儲可減少 50% 的存儲占用&#xff0c;單服務器即可支撐全量業務。 毫秒級漏氣報警響應時間控制在 500ms 以內&#xff0c;提升應急管理效率。 新架構支持未來…

第十四屆藍橋杯真題

一.LED 先配置LED的八個引腳為GPIO_OutPut,鎖存器PD2也是,然后都設置為起始高電平,生成代碼時還要去解決引腳沖突問題 二.按鍵 按鍵配置,由原理圖按鍵所對引腳要GPIO_Input 生成代碼,在文件夾中添加code文件夾,code中添加fun.c、fun.h、headfile.h文件,去資源包中把lc…

《基于機器學習發電數據電量預測》開題報告

個人主頁&#xff1a;大數據蟒行探索者 目錄 一、選題背景、研究意義及文獻綜述 &#xff08;一&#xff09;選題背景 &#xff08;二&#xff09;選題意義 &#xff08;三&#xff09;文獻綜述 1. 國內外研究現狀 2. 未來方向展望 二、研究的基本內容&#xff0c;擬解…

UWP程序用多頁面實現應用實例多開

Windows 10 IoT ARM64平臺下&#xff0c;UWP應用和MFC程序不一樣&#xff0c;同時只能打開一個應用實例。以串口程序為例&#xff0c;如果用戶希望同時打開多個應用實例&#xff0c;一個應用實例打開串口1&#xff0c;一個應用實例打開串口2&#xff0c;那么我們可以加載多個頁…

Springboot整合Netty簡單實現1對1聊天(vx小程序服務端)

本文功能實現較為簡陋&#xff0c;demo內容僅供參考&#xff0c;有不足之處還請指正。 背景 一個小項目&#xff0c;用于微信小程序的服務端&#xff0c;需要實現小程序端可以和他人1對1聊天 實現功能 Websocket、心跳檢測、消息持久化、離線消息存儲 Netty配置類 /*** au…

GitLab 中文版17.10正式發布,27項重點功能解讀【二】

GitLab 是一個全球知名的一體化 DevOps 平臺&#xff0c;很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版&#xff0c;專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料&#xff1a; 極狐GitLab 官網極狐…

好消息!軟航文檔控件(NTKO WebOffice)在Chrome 133版本上提示擴展已停用的解決方案

軟航文檔控件現有版本依賴Manifest V2擴展技術支持才能正常運行&#xff0c;然而這個擴展技術到2025年6月在Chrome高版本上就徹底不支持了&#xff0c;現在Chrome 133開始的版本已經開始彈出警告&#xff0c;必須手工開啟擴展支持才能正常運行。那么如何解決這個技術難題呢&…

字典樹與01trie

字典樹簡介 當我們通過字典查一個字或單詞的時候&#xff0c;我們會通過前綴或關鍵字的來快速定位一個字的位置&#xff0c;進行快速查找。 字典樹就是類似字典中索引表的一種數據結構&#xff0c;能夠幫助我們快速定位一個字符串的位置。 字典樹是一種存儲字符串的數據結構…

二十五、實戰開發 uni-app x 項目(仿京東)- 前后端輪播圖

定義了一個名為 Swiper 的Java類,用于表示一個輪播圖實體。它使用了 Jakarta Persistence API (JPA) 來映射數據庫表,并使用了 Lombok 庫來簡化代碼。以下是對代碼的詳細講解: 1. 包聲明 package com.jd.jdmall.model; 這行代碼聲明了該類所在的包路徑為 com.jd.jdmall.mode…

游戲搖桿開發:利用 Windows API 實現搖桿輸入捕獲

在現代游戲開發中&#xff0c;游戲搖桿&#xff08;Joystick&#xff09;作為一種重要的輸入設備&#xff0c;能夠為玩家提供更加沉浸式的游戲體驗。Windows 操作系統提供了一系列 API 函數&#xff0c;允許開發者輕松地捕獲和處理游戲搖桿的輸入。本文將介紹如何使用 Windows …

Ceph集群2025(Squid版)快速對接K8S cephFS文件存儲

ceph的塊存儲太簡單了。所以不做演示 查看集群 創建一個 CephFS 文件系統 # ceph fs volume create cephfs01 需要創建一個子卷# ceph fs subvolume create cephfs01 my-subvol -----------------#以下全部自動創建好 # ceph fs ls name: cephfs01, metadata pool: c…

Python中數據結構元組詳解

在Python中&#xff0c;元組&#xff08;Tuple&#xff09;是一種不可變的序列類型&#xff0c;常用于存儲一組有序的數據。與列表&#xff08;List&#xff09;不同&#xff0c;元組一旦創建&#xff0c;其內容無法修改。本文將詳細介紹元組的基本操作、常見運算、內置函數以及…

游戲引擎學習第183天

回顧和今天的計劃 我對接下來的進展感到非常興奮。雖然我們可能會遇到一些問題&#xff0c;但昨天我們差不多完成了將所有內容遷移到新的日志系統的工作&#xff0c;我們正在把一些內容整合進來&#xff0c;甚至是之前通過不同方式記錄時間戳的舊平臺層部分&#xff0c;現在也…

Spring 如何處理循環依賴

在 Spring 框架里&#xff0c;循環依賴指的是多個 Bean 之間相互依賴&#xff0c;從而形成一個閉環。例如&#xff0c;Bean A 依賴 Bean B&#xff0c;而 Bean B 又依賴 Bean A。Spring 主要通過三級緩存機制來處理循環依賴&#xff0c;下面詳細介紹相關內容。 1. 三級緩存的定…

Android開發layer-list

Android開發layer-list 它的用處可以在drawable上進行多圖拼接&#xff0c;比如啟動頁&#xff0c;不想圖片被拉伸就這么做。還有做某些線突出來。 示例代碼&#xff1a; <?xml version"1.0" encoding"utf-8"?> <layer-list xmlns:android&q…

手機測試,工作中學習

要學習各種機型的截圖方式、開發模式在哪。 榮耀機型&#xff1a;截圖&#xff1a;關節快速敲兩下。開發者模式在“系統和更新”里。 1.出現缺陷&#xff0c;需要獲取日志。 學習adb生成日志&#xff1a;當測試中出現缺陷的&#xff0c;使用adb logcat -d > d:/log.txt …

OBS虛擬背景深度解析:無需綠幕也能打造專業教學視頻(附插件對比)

想要錄制教學視頻卻苦于背景雜亂&#xff1f;本文將手把手教你用OBS實現專業級虛擬背景效果&#xff0c;無需綠幕也能輕松營造沉浸式教學場景。文末附6個提升畫面質感的免費背景資源&#xff01; 一、虛擬背景的核心價值&#xff1a;從「教師宿舍」到「虛擬講堂」的蛻變 我們調…

零基礎搭建智能法律知識庫!騰訊云HAI實戰教程

為什么需要法律知識庫&#xff1f; 想象一下&#xff0c;你的所有法律文件都在手邊&#xff0c;隨時可以搜索和分析。這就是法律知識庫的魅力所在。對于法律專業人士、處理大量法律文檔的企業&#xff0c;甚至是希望了解法律事項的普通人來說&#xff0c;法律知識庫都是一個不…