PyQt6内嵌http.server Web 和Flask Web服务器方法详解

devtools/2025/3/18 6:14:41/

PyQt6 可以内嵌一个简单的 Web 服务器。虽然 PyQt6 本身不提供直接的 Web 服务器功能,但可以结合 Python 的标准库(如 http.server)或其他 Web 框架(如 Flask、FastAPI 等)来实现。

示例:使用 http.server内嵌 Web 服务器

以下是一个简单的例子,展示如何在 PyQt6 应用中内嵌一个基本的 Web 服务器:

import sys

from PyQt6.QtWidgets import QApplication, QMainWindow, QTextEdit

from PyQt6.QtCore import QThread, pyqtSignal

from http.server import BaseHTTPRequestHandler, HTTPServer

 

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):

    def do_GET(self):

        self.send_response(200)

        self.send_header('Content-type', 'text/html')

        self.end_headers()

        self.wfile.write(b"Hello from PyQt6 Web Server!")

 

class WebServerThread(QThread):

    def run(self):

        server_address = ('', 8000)

        httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)

        print("Web server running on port 8000...")

        httpd.serve_forever()

 

class MainWindow(QMainWindow):

    def __init__(self):

        super().__init__()

        self.setWindowTitle("PyQt6 Web Server Example")

        self.text_edit = QTextEdit(self)

        self.setCentralWidget(self.text_edit)

        self.text_edit.setText("Web server is running...")

 

        self.webserver_thread = WebServerThread()

        self.webserver_thread.start()

 

if __name__ == "__main__":

    app = QApplication(sys.argv)

    window = MainWindow()

    window.show()

    sys.exit(app.exec())

关键点:

1. SimpleHTTPRequestHandler:这是一个简单的 HTTP 请求处理器,用于处理 GET 请求并返回响应。

2. WebServerThread:这是一个 QThread 子类,用于在后台运行 Web 服务器,避免阻塞主线程。

3. MainWindow:这是 PyQt6 的主窗口,启动时会在后台运行 Web 服务器。

 

运行效果:

- 运行程序后,Web 服务器会在 http://localhost:8000上启动。

- 访问该地址时,会看到 "Hello from PyQt6 Web Server!" 的响应。

- PyQt6 应用的主窗口会显示 "Web server is running..."。

注意事项:

- 这种方法适合简单的场景。如果需要更复杂的功能(如路由、模板渲染等),建议使用 Flask 或 FastAPI 等框架。

Pyqt6内嵌Flask框架完整的示例代码:
from flask import Flask, render_template_string

app = Flask(__name__)

@app.route('/')
def index():
    return render_template_string('''
        <h1>Hello, Flask in PyQt6!</h1>
        <p>This is a Flask application embedded in PyQt6.</p>
    ''')

PyQt6 主程序 (main.py)
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtCore import QUrl
import threading
import time
from werkzeug.serving import make_server
from flask_app import app

class FlaskThread(threading.Thread):
    def __init__(self, app):
        threading.Thread.__init__(self)
        self.server = make_server('127.0.0.1', 5000, app)
        self.ctx = app.app_context()
        self.ctx.push()

    def run(self):
        self.server.serve_forever()

    def shutdown(self):
        self.server.shutdown()

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt6 with Flask")
        self.setGeometry(100, 100, 800, 600)
        self.browser = QWebEngineView()
        self.setCentralWidget(self.browser)
        self.start_flask()

    def start_flask(self):
        self.flask_thread = FlaskThread(app)
        self.flask_thread.start()
        time.sleep(1)
        self.browser.setUrl(QUrl("http://127.0.0.1:5000"))

    def closeEvent(self, event):
        self.flask_thread.shutdown()
        event.accept()

if __name__ == '__main__':
    qt_app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(qt_app.exec())
打包命令
pyinstaller --onefile --windowed --add-data "flask_app.py;." main.py

通过以上步骤,你可以将 PyQt6 内嵌 Flask 的应用打包成一个独立的可执行文件,并在没有 Python 环境的电脑上运行。


http://www.ppmy.cn/devtools/168005.html

相关文章

遗传算法基础讲解

一、遗传算法基础 1. 什么是遗传算法? 一种模拟生物进化过程的优化算法,基于达尔文的“自然选择”和“遗传学理论”。核心思想:通过选择(优胜劣汰)、交叉(基因重组)、变异(基因突变)操作,逐步逼近问题的最优解。2. 为什么用遗传算法? 适用性强:解决复杂的非线性、…

C语言的软件工程

C语言的软件工程 引言 C语言作为一种历史悠久、功能强大的编程语言&#xff0c;在软件工程领域有着广泛的应用。自1972年由Dennis Ritchie开发以来&#xff0c;C语言凭借其高效性能、灵活性以及可移植性&#xff0c;成为了操作系统、嵌入式系统及高性能应用程序开发的首选语言…

【css酷炫效果】纯CSS实现进度条加载动画

【css酷炫效果】纯CSS实现进度条加载动画 缘创作背景html结构css样式完整代码基础版进阶版 效果图 通过CSS渐变与背景位移动画&#xff0c;无需JavaScript即可创建流体动态进度条。 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u…

conda、poetry,pip相关

poetry poetry 是一个 Python 打包和依赖管理工具&#xff0c;旨在简化 Python 包的创建、发布和依赖管理。与传统的 setuptools、pip 和 requirements.txt 的组合相比&#xff0c;poetry 提供了一个统一和简化的工具和工作流程。 以下是关于 poetry 的详细介绍&#xff1a; …

【Leetcode 每日一题】1963. 使字符串平衡的最小交换次数

问题背景 给你一个字符串 s s s&#xff0c;下标从 0 0 0 开始 &#xff0c;且长度为偶数 n n n。字符串 恰好 由 n / 2 n / 2 n/2 个开括号 ‘[’ 和 n / 2 n / 2 n/2 个闭括号 ‘]’ 组成。 只有能满足下述所有条件的字符串才能称为 平衡字符串 &#xff1a; 字符串是…

ai-1 搭建python

努力学习ai 1、python下载 现在使用版本就不要使用python2了&#xff0c;不维护了。 下载地址&#xff1a;https://www.python.org/getit/ 2、安装 自定义安装&#xff0c;勾选下面两个复选框&#xff0c;剩下的就下一步 3、 测试安装成功否 4、idea安装插件 5、使用插件…

Go语言中的错误处理与异常恢复:性能对比与实践思考

Gone是一款轻量级Go依赖注入框架&#xff0c;通过简洁的标签声明实现自动组件管理。它提供零侵入设计、完整生命周期控制和极低运行时开销&#xff0c;让开发者专注于业务逻辑而非依赖关系处理。 项目地址&#xff1a; https://github.com/gone-io/gone 文章目录 Go的错误处理哲…

Linux信号的产生

目录 一、键盘也能发信号 1. 终端按键与信号 2. 核心转储是什么&#xff1f; 3. 核心转储的作用与调试应用 3.1 核心转储的核心价值 3.2 如何利用核心转储调试程序 3.3 Core Dump标志与进程状态 3.4 信号处理与特殊限制 二、系统函数发信号 1. kill函数 2. raise函数…