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

相关推荐
感谢地心引力3 分钟前
【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具
数据库·python·conda·pyqt·pyinstaller
xiaohanbao092 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
love530love2 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫3 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python
先做个垃圾出来………3 小时前
SortedList
python
这里有鱼汤3 小时前
从DeepSeek到Kronos,3个原因告诉你:Kronos如何颠覆传统量化预测
后端·python·aigc
晓宜3 小时前
Java25 新特性介绍
java·python·算法
深栈3 小时前
机器学习:决策树
人工智能·python·决策树·机器学习·sklearn
MediaTea3 小时前
Python:匿名函数 lambda
开发语言·python
hui函数4 小时前
Python全栈(基础篇)——Day07:后端内容(函数的参数+递归函数+实战演示+每日一题)
后端·python