Python結(jié)合PyQt和Flask實(shí)現(xiàn)桌面端一鍵啟動/關(guān)閉Web服務(wù)的應(yīng)用
結(jié)合 PyQt 與 Flask,你可以輕松打造一個桌面應(yīng)用,實(shí)現(xiàn)對本地 Web 服務(wù)的一鍵啟動與停止。本文將以一個完整示例演示如何做,并詳細(xì)講解每個關(guān)鍵步驟,適合希望將可視化界面與后臺 API 服務(wù)整合的開發(fā)者參考。
1. 項(xiàng)目簡介
我們將創(chuàng)建一個簡單的 PyQt5 桌面應(yīng)用,界面有兩個按鈕:“啟動 Flask App”和“停止 Flask App”。點(diǎn)擊按鈕即可在本地后臺啟動或關(guān)閉 Flask Web 服務(wù)(默認(rèn)監(jiān)聽 127.0.0.1:5000)。
2. 環(huán)境準(zhǔn)備
請確保已安裝以下庫:
pip install PyQt5 flask
3. 全部代碼
下面是完整的實(shí)現(xiàn)代碼,并附有詳細(xì)注釋:
import sys, webbrowser
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtCore import QTimer
from flask import Flask
from werkzeug.serving import make_server
from multiprocessing import Process
# Flask app 和之前一樣
flask_app = Flask(__name__)
@flask_app.route('/')
def hello_world():
return 'Hello, World!'
server = None
flask_process = None
def run_flask_app():
global server
wsgi_app = flask_app.wsgi_app
server = make_server('127.0.0.1', 5003, wsgi_app)
server.serve_forever()
def start_flask_process():
global flask_process
flask_process = Process(target=run_flask_app)
flask_process.start()
def stop_flask_app():
global server, flask_process
if server:
server.shutdown()
server = None
if flask_process:
flask_process.terminate()
flask_process = None
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQT Flask Demo')
self.setGeometry(100, 100, 400, 200)
self.start_button = QPushButton('Start Flask App')
self.start_button.clicked.connect(self.start_flask_and_open_web)
self.stop_button = QPushButton('Stop Flask App')
self.stop_button.clicked.connect(self.stop_flask_app)
layout = QVBoxLayout()
layout.addWidget(self.start_button)
layout.addWidget(self.stop_button)
main_widget = QWidget()
main_widget.setLayout(layout)
self.setCentralWidget(main_widget)
def start_flask_and_open_web(self):
start_flask_process()
QTimer.singleShot(1000, lambda: webbrowser.open("http://127.0.0.1:5003"))
def stop_flask_app(self):
stop_flask_app()
if __name__ == '__main__':
qt_app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(qt_app.exec_())


4. 關(guān)鍵點(diǎn)說明
多進(jìn)程啟動 Flask:Flask 自身適用于開發(fā)環(huán)境,理論上可直接用 app.run(),但和 GUI 線程混用容易阻塞界面;因此用 multiprocessing 分離出來。
按鈕實(shí)現(xiàn):使用 PyQt5 的信號/槽機(jī)制將按鈕點(diǎn)擊與啟動/停止 Flask 操作綁定。
平滑關(guān)停:用 server.shutdown() 和 process.terminate() 方法確保 Flask 服務(wù)可以被正常關(guān)閉和回收資源。
5. 運(yùn)行效果
運(yùn)行后你會看到如下界面:
- 點(diǎn)擊“Start Flask App”即在本地 http://127.0.0.1:5000 出現(xiàn) Hello, World! 頁面。
- 點(diǎn)擊“Stop Flask App”及時關(guān)閉服務(wù),網(wǎng)頁訪問失效。
6. 擴(kuò)展思路
- 可以為 Flask 增加更多 API 路由功能,實(shí)現(xiàn)桌面端-服務(wù)端交互;
- 可以整合到企業(yè)客戶端實(shí)現(xiàn)一鍵本地服務(wù)、多端通信等應(yīng)用場景;
- 若需生產(chǎn)環(huán)境使用,請考慮用
gunicorn、waitress等 WSGI 服務(wù)器,并處理多端口/多進(jìn)程切換和異常管理。
本文代碼及其思路適合用于開發(fā)調(diào)試工具、本地化桌面助手、數(shù)據(jù)展示儀表盤等實(shí)用場景。
到此這篇關(guān)于Python結(jié)合PyQt和Flask實(shí)現(xiàn)桌面端一鍵啟動/關(guān)閉Web服務(wù)的應(yīng)用的文章就介紹到這了,更多相關(guān)Python Web服務(wù)啟動與停止內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python web.py服務(wù)器與客戶端的實(shí)現(xiàn)示例
- 如何將Python Web應(yīng)用部署到服務(wù)器(Docker + Nginx)
- 使用Python實(shí)現(xiàn)WebSocket服務(wù)器與客戶端通信功能
- Python使用Quart作為web服務(wù)器的代碼實(shí)現(xiàn)
- Python使用flask作為web服務(wù)器的代碼實(shí)現(xiàn)
- 教你使用Python實(shí)現(xiàn)一個簡易版Web服務(wù)器
- Python本地搭建靜態(tài)Web服務(wù)器的實(shí)現(xiàn)
- Python多任務(wù)版靜態(tài)Web服務(wù)器實(shí)現(xiàn)示例
相關(guān)文章
python中使用asyncio實(shí)現(xiàn)異步IO實(shí)例分析
在本篇文章里小編給大家整理的是一篇關(guān)于python中使用asyncio實(shí)現(xiàn)異步IO實(shí)例分析內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-02-02
python 實(shí)現(xiàn)兩個變量值進(jìn)行交換的n種操作
這篇文章主要介紹了python 實(shí)現(xiàn)兩個變量值進(jìn)行交換的n種操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解
這篇文章主要介紹了Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解,Pandas是一個用于數(shù)據(jù)分析和處理的Python庫,它提供了高效的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,使得數(shù)據(jù)的清洗、轉(zhuǎn)換、分析和可視化變得更加容易和靈活,需要的朋友可以參考下2023-08-08
python中列表和元組的用法以及區(qū)別超詳細(xì)講解
這篇文章主要介紹了Python中的列表和元組,包括它們的定義、特點(diǎn)、常見操作以及與列表的區(qū)別,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03

