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

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 环境的电脑上运行。

相关推荐
高级程序源6 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
WeiXin_DZbishe6 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
kimnoic7 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna7 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
必须得开心呀8 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan8 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂8 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师8 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan9 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe9 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计