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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【源码分析】Nacos实例注册流程分析-事件驱动框架

【踩坑记录】 本人下载的Nacos 服务端版本是2.3.2&#xff0c;在开始进行源码编译便遇到问题&#xff0c;下面是各个问题记录 源码大量爆红 在最开始用Idea加载Maven项目的时候&#xff0c;发现项目中大量的代码爆红&#xff0c;提示其类或者包不存在&#xff0c;后来结果查…

Unity物理射线滤除某层

关键点&#xff1a;使用LayerMask&#xff0c;针对Physics里检测collider的射线&#xff08;raycast、OverlapSphere...&#xff09;都适用 1.使用layerMask过滤层 int ignoreLayer LayerMask.NameToLayer("IgnoreRaycast");// 获取要忽略的层 int layerMask ~(1…

【白话神经网络(二)】矩阵、CNN、RNN

全连接层 回顾前面学过的知识&#xff1a; 一个最简单的神经网络&#xff0c;就是ywxb 套上一个激活函数。 如果有多个输入&#xff0c;那就是多个w和x 如果有多个输出&#xff0c;那就再来一行公式&#xff0c;多一组w和b 要是神经元多了的话&#xff0c;公式密密麻麻的&…

Unity教程(二十二)技能系统 分身技能

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

深入解析Java面向对象三大特征之多态、final、抽象类与接口

面向对象编程&#xff08;OOP&#xff09;的三大核心特征为封装、继承、多态&#xff0c;其中多态是最具灵活性和扩展性的特性。本文将从多态的本质出发&#xff0c;结合final关键字、抽象类与接口的设计&#xff0c;深入探讨这些概念的应用场景及其在代码中的实现细节&#xf…

编码器和解码器概念及算法示例【清晰易懂】

编码器&#xff08;Encoder&#xff09;和解码器&#xff08;Decoder&#xff09;是处理信息的一对“搭档”&#xff0c;它们的作用就像是“翻译员”和“逆翻译员”。 1. 编码器&#xff08;Encoder&#xff09;是什么&#xff1f; &#x1f449; 把原始信息变成另一种形式&a…

爬虫逆向:逆向中用到汇编语言详细总结

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、汇编语言基础二、常见汇编指令2.1 数据传输指令2.2 算术指令2.3 逻辑指令2.4 控制流指令2.5 其他指令三、寄存器概述四、调用约定五、栈操作与函数调用六、逆向工程中的汇编分析七、常用逆向工具八、实际案例分析九…

CTF WEB题

[文件包含,少许难度] 地址:攻防世界 代码审计WRONG WAY! <?php include("flag.php"); #包含了一个“flag.php”文件 highlight_file(__FILE__); #来显示当前文件的源代码 if(isset($_GET["file1"]) && isset($_GET["file2"])) #isse…

c++图论(一)之图论的起源和图的概念

C 图论之图论的起源和图的概念 图论&#xff08;Graph Theory&#xff09;是数学和计算机科学中的一个重要分支&#xff0c;其起源可以追溯到 18 世纪 的经典问题。以下是图论的历史背景、核心起源问题及其与基本概念和用途&#xff1a; 借用一下CSDN的图片哈 一、图论的起源&…

Ollama + CherryStudio:构建本地私有知识库

前面我们介绍了Ollama的安装和使用&#xff0c;并通过Open-WebUI进行调用&#xff0c;相信大家对Ollama也有了一定的了解&#xff1b;这篇博文就结合Ollama工具和CherryStudio工具构建一个本地知识库&#xff08;RAG&#xff09;&#xff1b;在进行接下来的操作之前&#xff0c…

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.2.1AWS OpenSearch 无服务器方案深度解析与实践指南1. Serverless架构的核心价值与行业趋势1.1 传统Elasticsearch集群的运维挑战1.2 Serverless技术演进路线技术特性对比…

清晰易懂的Java8安装教程

小白也能看懂的 Java 8 安装教程&#xff08;JDK 和 JRE 分目录安装&#xff09; 本教程将手把手教你如何在 Windows 系统上安装 Java 8&#xff08;JDK 1.8&#xff09;&#xff0c;并将 JDK 和 JRE 安装到不同的目录中&#xff0c;同时提供国内 Java 8 下载源和方法。即使你…

图搜索的两种写法,广度优先和深度优先

最近AI的爆发大家都疯了&#xff0c;也确实够疯&#xff0c;前几年谁能天天和AI聊天呢&#xff0c;特别它越来越智能&#xff0c;越来越理解你&#xff0c;你越来越离不开它&#xff0c;我很好奇将来它会不会有情绪&#xff0c;太可怕了&#xff0c;一旦有了这个就有了感情&…

嵌入式八股RTOS与Linux---前言篇

前言 Linux与RTOS是校招八股的时候很喜欢考察的知识,在这里并没有把两个操作系统完全的独立开去讲,放在一起对比或许可能加深印象。我们讲Linux的内核有五部分组成:进程调度、内存管理、文件系统、网络接口、进程间通信,所以我也将从这五方面出发 中断管理去对比和RTOS的不同。…

ChatBI 的技术演进与实践挑战:衡石科技如何通过 DeepSeek 实现商业落地

随着人工智能技术的快速发展&#xff0c;ChatBI&#xff08;基于自然语言交互的商业智能&#xff09;逐渐成为企业数据分析领域的热门话题。作为 BI&#xff08;商业智能&#xff09;领域的新形态&#xff0c;ChatBI 通过自然语言处理&#xff08;NLP&#xff09;技术&#xff…

基于Vue实现Echarts的平滑曲线

在Vue2.x的项目中使用echarts实现如下效果 安装echarts npm install echarts --save组件引入echarts // 在你的Vue组件中 import * as echarts from echarts;在模板中添加一个div元素&#xff0c;用来放置图表 <divref"chart"class"chart"style"…

关于重构分析查询界面的思考(未完)

业务系统里&#xff0c;查询界面很常见&#xff0c;数据分析场景需求普遍而迫切&#xff0c;而新的技术也在不断出现&#xff0c;很有必要重构分析查询界面。 查询筛选 为了尽可能从数据中发现&#xff0c;需要尽可能地将查询条件添加进来&#xff0c;可这样&#xff0c;查询…

在jQuery中DOM操作

&#xff08;一&#xff09;元素选取 各种选择器的使用方法与示例 标签选择器&#xff1a;通过 HTML 标签名称来选取元素。例如&#xff0c;若想选中页面中所有的段落元素&#xff0c;可使用$(‘p’)。假设我们有如下 HTML 结构&#xff1a; 这是第一个段落 这是嵌套在div中的…

Java 集合框架中 `List` 接口及其子类的详细介绍,并用 UML 图表展示层次结构关系,用表格对比各个类的差异。

下面是 Java 集合框架中 List 接口及其子类的详细介绍&#xff0c;并用 UML 图表展示层次结构关系。最后&#xff0c;我会用表格对比各个类的差异。 Java 集合框架中 List 接口及其子类 UML 类图描述 以下是 List 接口及其子类的 UML 类图描述&#xff0c;不包含方法。 详细…

Java面试八股—Redis篇

一、Redis的使用场景 &#xff08;一&#xff09;缓存 1.Redis使用场景缓存 场景&#xff1a;缓存热点数据&#xff08;如用户信息、商品详情&#xff09;&#xff0c;减少数据库访问压力&#xff0c;提升响应速度。 2.缓存穿透 正常的访问是&#xff1a;根据ID查询文章&…