Python结合PyQt和Flask实现桌面端一键启动/关闭Web服务的应用

 更新时间:2025年12月07日 09:11:59   作者:weixin_46244623  
本文将以一个完整示例演示如何结合 PyQt 与 Flask,轻松打造一个桌面应用,实现对本地 Web 服务的一键启动与停止,感兴趣的小伙伴可以跟随小编一起学习一下

结合 PyQt 与 Flask,你可以轻松打造一个桌面应用,实现对本地 Web 服务的一键启动与停止。本文将以一个完整示例演示如何做,并详细讲解每个关键步骤,适合希望将可视化界面与后台 API 服务整合的开发者参考。

1. 项目简介

我们将创建一个简单的 PyQt5 桌面应用,界面有两个按钮:“启动 Flask App”和“停止 Flask App”。点击按钮即可在本地后台启动或关闭 Flask Web 服务(默认监听 127.0.0.1:5000)。

2. 环境准备

请确保已安装以下库:

pip install PyQt5 flask

3. 全部代码

下面是完整的实现代码,并附有详细注释:

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. 关键点说明

多进程启动 Flask:Flask 自身适用于开发环境,理论上可直接用 app.run(),但和 GUI 线程混用容易阻塞界面;因此用 multiprocessing 分离出来。

按钮实现:使用 PyQt5 的信号/槽机制将按钮点击与启动/停止 Flask 操作绑定。

平滑关停:用 server.shutdown()process.terminate() 方法确保 Flask 服务可以被正常关闭和回收资源。

5. 运行效果

运行后你会看到如下界面:

  • 点击“Start Flask App”即在本地 http://127.0.0.1:5000 出现 Hello, World! 页面。
  • 点击“Stop Flask App”及时关闭服务,网页访问失效。

6. 扩展思路

  • 可以为 Flask 增加更多 API 路由功能,实现桌面端-服务端交互;
  • 可以整合到企业客户端实现一键本地服务、多端通信等应用场景;
  • 若需生产环境使用,请考虑用 gunicornwaitress等 WSGI 服务器,并处理多端口/多进程切换和异常管理。

本文代码及其思路适合用于开发调试工具、本地化桌面助手、数据展示仪表盘等实用场景。

到此这篇关于Python结合PyQt和Flask实现桌面端一键启动/关闭Web服务的应用的文章就介绍到这了,更多相关Python Web服务启动与停止内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python使用FastParquet库处理Parquet文件的方法

    Python使用FastParquet库处理Parquet文件的方法

    在大数据时代,数据存储和处理的效率至关重要,Parquet作为一种列式存储格式,因其高效的压缩和编码方案,成为大数据处理中的热门选择,本文将深入探讨FastParquet库的使用,帮助读者掌握如何利用这一工具高效处理Parquet文件,需要的朋友可以参考下
    2025-02-02
  • pytorch超详细安装教程之Anaconda、PyTorch和PyCharm全套安装流程

    pytorch超详细安装教程之Anaconda、PyTorch和PyCharm全套安装流程

    这篇文章主要介绍了pytorch超详细安装教程之Anaconda、PyTorch和PyCharm全套安装流程,介绍基于Anaconda环境以及PyCharm软件结合,安装PyTorch深度学习框架,需要的朋友可以参考下
    2023-04-04
  • Pytorch数据读取与预处理该如何实现

    Pytorch数据读取与预处理该如何实现

    这篇文章主要介绍了Pytorch数据读取与预处理该如何实现,帮助大家更好的理解和学习使用Pytorch,感兴趣的朋友可以了解下
    2021-03-03
  • Python脚本实现抓取指定网站上的所有图片

    Python脚本实现抓取指定网站上的所有图片

    对于开发者、数据分析师以及研究人员而言,从网页中提取有价值的信息是一项至关重要的技能,本文将详细介绍如何使用Python编写一个脚本来自动抓取指定网站上的所有图片,需要的可以参考下
    2024-10-10
  • Python+PyQt构建自动化定时任务执行工具详细代码示例

    Python+PyQt构建自动化定时任务执行工具详细代码示例

    在日常工作中,我们常常会用到需要周期性执行的任务,这篇文章主要介绍了Python+PyQt构建自动化定时任务执行工具的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • Python3中英文关键词提取的几个方法

    Python3中英文关键词提取的几个方法

    本文介绍Python3中文关键词提取的几种算法,包括TF-IDF(支持自定义语料库)、TextRank(jieba实现)、LAC及KeyBert,覆盖词性筛选、共现分析等方法,后续将更新更前沿技术
    2025-07-07
  • Python Matplotlib库入门指南

    Python Matplotlib库入门指南

    这篇文章主要介绍了Python Matplotlib库入门指南,本文讲解了Matplotlib是什么,然后给出了Matplotlib基础绘图实例如绘制折线图、绘制多线图,并给出了图例功能使用实例,需要的朋友可以参考下
    2015-05-05
  • Python 实现将某一列设置为str类型

    Python 实现将某一列设置为str类型

    这篇文章主要介绍了Python 实现将某一列设置为str类型,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Python列表list内建函数用法实例分析【insert、remove、index、pop等】

    Python列表list内建函数用法实例分析【insert、remove、index、pop等】

    这篇文章主要介绍了Python列表list内建函数用法,结合具体实例形式分析了list中insert、remove、index、pop等函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2017-07-07
  • python opencv minAreaRect 生成最小外接矩形的方法

    python opencv minAreaRect 生成最小外接矩形的方法

    这篇文章主要介绍了python opencv minAreaRect 生成最小外接矩形的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-07-07

最新评论