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

作者:

文章目录
  • 我们将创建一个简单的 PyQt5 桌面应用,界面有两个按钮:“启动 Flask App”和“停止 Flask App”。点击按钮即可在本地后台启动或关闭 Flask Web 服务(默认监听 127.0.0.1:5000)。
  • 请确保已安装以下库: pip install PyQt5 flask
  • 下面是完整的实现代码,并附有详细注释: 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_())
  • 多进程启动 Flask:Flask 自身适用于开发环境,理论上可直接用 app.run(),但和 GUI 线程混用容易阻塞界面;因此用 multiprocessing 分离出来。 按钮实现:使用 PyQt5 的信号/槽机制将按钮点击与启动/停止 Flask 操作绑定。 平滑关停:用 server.shutdown() 和 process.terminate() 方法确保 Flask 服务可以被正常关闭和回收资源。
  • 运行后你会看到如下界面: 点击“Start Flask App”即在本地 http://127.0.0.1:5000 出现 Hello, World! 页面。 点击“Stop Flask App”及时关闭服务,网页访问失效。
  • 可以为 Flask 增加更多 API 路由功能,实现桌面端-服务端交互; 可以整合到企业客户端实现一键本地服务、多端通信等应用场景; 若需生产环境使用,请考虑用 gunicorn、waitress等 WSGI 服务器,并处理多端口/多进程切换和异常管理。 本文代码及其思路适合用于开发调试工具、本地化桌面助手、数据展示仪表盘等实用场景。 到此这篇关于Python结合PyQt和Flask实现桌面端一键启动/关闭Web服务的应用的文章就介绍到这了,更多相关Python Web服务启动与停止内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python web.py服务器与客户端的实现示例 如何将Python Web应用部署到服务器(Docker + Nginx) 使用Python实现WebSocket服务器与客户端通信功能 Python使用Quart作为web服务器的代码实现 Python使用flask作为web服务器的代码实现 教你使用Python实现一个简易版Web服务器 Python本地搭建静态Web服务器的实现 Python多任务版静态Web服务器实现示例
  • 目录
    • 1. 项目简介
    • 2. 环境准备
    • 3. 全部代码
    • 4. 关键点说明
    • 5. 运行效果
    • 6. 扩展思路

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

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

    请确保已安装以下库:

    pip install PyQt5 flask
    

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

    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_())
    

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

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

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

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

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

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

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

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

    您可能感兴趣的文章:

    • python web.py服务器与客户端的实现示例
    • 如何将Python Web应用部署到服务器(Docker + Nginx)
    • 使用Python实现WebSocket服务器与客户端通信功能
    • Python使用Quart作为web服务器的代码实现
    • Python使用flask作为web服务器的代码实现
    • 教你使用Python实现一个简易版Web服务器
    • Python本地搭建静态Web服务器的实现
    • Python多任务版静态Web服务器实现示例

    站内搜索