当前位置: 首页 > news >正文

【100天精通python】Day40:GUI界面编程_PyQt 从入门到实战(完)_网络编程与打包发布

目录

 8 网络编程

8.1 使用PyQt 网络模块进行网络通信

服务器端示例

客户端示例

 8.2 处理网络请求和响应

9 打包和发布

9.1 创建可执行文件或安装程序

9.2 解决依赖问题

9.3 发布 PyQt 应用到不同平台

9.3.1 发布到 Windows

9.3.2 发布到 macOS

9.3.3 发布到 Linux

9.4 跨平台考虑事项


 8 网络编程

        网络编程是实现不同计算机之间通信的关键部分。在 PyQt 中,你可以使用 Qt 的网络模块来实现网络通信,包括创建客户端和服务器应用,以及处理网络请求和响应。下面详细解释和示例演示如何在 PyQt 中进行网络编程。

8.1 使用PyQt 网络模块进行网络通信

        Qt 的网络模块提供了许多类来实现不同类型的网络通信,包括基于 TCP 和 UDP 的通信。在这个示例中,我们将重点关注基于 TCP 的通信。

服务器端示例:

        以下是一个简单的服务器端示例,展示如何使用 PyQt的网络模块创建一个基于 TCP 的服务器应用:

import sys
from PyQt6.QtWidgets import QApplication
from PyQt6.QtNetwork import QTcpServer, QTcpSocket, QHostAddressclass Server(QTcpServer):def __init__(self):super().__init__()self.listen(QHostAddress.SpecialAddress.AnyIPv4, 12345)  # 使用正确的地址类型self.newConnection.connect(self.on_new_connection)def on_new_connection(self):client_socket = self.nextPendingConnection()  # 获取新连接的客户端套接字client_socket.readyRead.connect(self.on_ready_read)  # 连接readyRead信号到处理函数def on_ready_read(self):client_socket = self.sender()  # 获取发送信号的客户端套接字data = client_socket.readAll()  # 读取客户端发送的数据print("Received:", data.decode())  # 打印接收到的数据response = "Server response: " + data.decode()client_socket.write(response.encode())  # 发送响应给客户端app = QApplication(sys.argv)
server = Server()
sys.exit(app.exec())

客户端示例:

以下是一个简单的客户端示例,展示如何使用PyQt的网络模块创建一个基于 TCP 的客户端应用:

import sys
from PyQt6.QtWidgets import QApplication
from PyQt6.QtNetwork import QTcpSocketclass ClientApp(QApplication):def __init__(self, argv):super().__init__(argv)self.client = Client()self.client.connectToHost("127.0.0.1", 12345)  # 连接到服务器class Client(QTcpSocket):def __init__(self):super().__init__()self.connected.connect(self.on_connected)  # 连接到服务器后触发的槽函数self.readyRead.connect(self.on_ready_read)  # 当有数据可读时触发的槽函数self.disconnected.connect(self.on_disconnected)  # 当与服务器断开连接时触发的槽函数def on_connected(self):print("Connected to server")  # 连接成功后打印消息message = "Hello, server!"self.write(message.encode('utf-8'))  # 发送消息给服务器def on_ready_read(self):data = self.readAll()  # 读取服务器发来的数据print(f"Received from server: {data.decode('utf-8')}")  # 打印接收到的数据def on_disconnected(self):print("Disconnected from server")  # 断开连接时打印消息if __name__ == "__main__":app = ClientApp(sys.argv)  # 创建应用程序对象sys.exit(app.exec())  # 运行应用程序事件循环

 8.2 处理网络请求和响应:

          以上代码是使用 PyQt6 库来实现基于 TCP 的网络通信的示例。它涉及一个简单的客户端和服务器,演示了如何在两者之间发送请求和响应的基本交互过程。

服务器端代码

  1. 导入所需模块。
  2. 创建一个继承自 QTcpServerServer 类,重写其构造函数。
  3. 在构造函数中,使用 listen 方法监听在本地主机上的特定端口(这里是 12345)。
  4. 使用 newConnection 信号连接到新连接的槽函数 on_new_connection
  5. on_new_connection 中,获取新的客户端套接字,并连接 readyRead 信号到处理函数 on_ready_read
  6. on_ready_read 中,读取客户端发送的请求并打印。
  7. 生成一个响应消息,将其编码后发送给客户端。

客户端代码

  1. 导入所需模块。
  2. 创建一个继承自 QApplicationClientApp 类,重写其构造函数。
  3. 在构造函数中,创建一个 Client 对象并连接到服务器主机和端口。
  4. Client 类中,继承自 QTcpSocket,重写其构造函数。
  5. 在构造函数中,连接 connected 信号到 on_connected 槽函数,连接 readyRead 信号到 on_ready_read 槽函数,连接 disconnected 信号到 on_disconnected 槽函数。
  6. on_connected 中,发送请求消息给服务器。
  7. on_ready_read 中,读取来自服务器的响应数据并打印。
  8. on_disconnected 中,打印与服务器断开连接的消息。

总结:

  • 这个示例展示了基于 PyQt6 的简单网络通信。
  • 服务器监听在本地主机的端口上,并处理客户端连接、请求和响应。
  • 客户端连接到服务器,并发送请求,等待服务器的响应。
  • 代码中的注释解释了各个部分的功能和步骤。
  • 这只是一个基本示例,未考虑错误处理、安全性、协议等。
  • 在实际应用中,你可以根据需要扩展功能,以满足具体的需求。

9 打包和发布

        打包和发布是将你的 PyQt 应用程序交付给用户的重要步骤。在本部分,我将详细解释如何创建可执行文件或安装程序、解决依赖问题以及将 PyQt 应用程序发布到不同平台。

9.1 创建可执行文件或安装程序

使用 PyInstaller:

PyInstaller 是一个常用的打包工具,可以将你的 Python 代码和依赖库打包成一个独立的可执行文件。

以下是使用 PyInstaller 将一个 PyQt 应用程序打包成可执行文件的示例:

  1. 首先,安装 PyInstaller:

pip install pyinstaller

然后,在命令行中执行以下命令:

pyinstaller --onefile your_app.py

这将会在 dist 文件夹中生成一个可执行文件,你可以将它分发给用户。

9.2 解决依赖问题

当你打包 PyQt 应用程序时,需要确保包含所有的依赖库,以便应用程序可以在不同环境中正常运行。PyInstaller 会自动检测 PyQt 依赖,但对于其他的 Python 库,你可能需要手动指定。

在打包之前,你可以创建一个 requirements.txt 文件,列出你的应用程序所需的所有依赖库。然后在打包时使用以下命令:

pyinstaller --onefile --requirements=requirements.txt your_app.py

9.3 发布 PyQt 应用到不同平台

        PyQt 支持在不同平台上运行,包括 Windows、macOS 和 Linux。在发布之前,需要确保测试你的应用程序在目标平台上正常工作。发布 PyQt 应用程序到不同平台涉及一些平台特定的注意事项和步骤。以下是一个通用的指南,用于将 PyQt 应用程序发布到不同的操作系统(Windows、macOS 和 Linux)上:

 9.3.1 发布到 Windows

  1. 打包可执行文件: 使用 PyInstaller 或类似的工具将你的 PyQt 应用程序打包成一个独立的可执行文件。确保在 Windows 上测试这个可执行文件,以确保它在不同的 Windows 版本上正常运行。

  2. 创建安装程序: 你可以使用 Inno Setup、NSIS(Nullsoft Scriptable Install System)等工具来创建一个用于安装你的应用程序的安装程序。这样用户可以方便地安装你的应用并将其添加到开始菜单中。

9.3.2 发布到 macOS

  1. 打包为 .app 文件: 使用 PyInstaller 或 py2app 工具将你的 PyQt 应用程序打包成一个 .app 文件,这是 macOS 应用程序的标准格式。

  2. 配置图标和元数据: 为你的应用程序添加适当的图标和元数据,这将在应用程序启动器和 Dock 中显示。

  3. 代码签名: 在发布到 macOS 之前,通常需要获取苹果开发者证书并对你的应用程序进行代码签名。这可以增加应用程序的安全性和用户信任度。

9.3.3 发布到 Linux

  1. 打包可执行文件: 使用 PyInstaller、cx_Freeze 或类似的工具将你的 PyQt 应用程序打包成一个可执行文件。在 Linux 上,应用程序通常被放置在 /usr/bin/usr/local/bin 目录中。

  2. 创建启动器快捷方式: 根据不同的 Linux 发行版,你可能需要创建启动器快捷方式,以便用户可以方便地启动你的应用程序。这些快捷方式通常会被添加到应用程序菜单中。

9.4 跨平台考虑事项

  1. 测试: 在发布之前,务必在目标操作系统上进行全面的测试,确保应用程序在不同的平台上正常工作。

  2. 依赖管理: 确保在发布时包含应用程序所需的所有依赖库。使用虚拟环境可以有助于隔离不同平台上的依赖。

  3. 文档和支持: 提供适当的文档和支持,以便用户在不同平台上安装和使用你的应用程序。

  4. 版本控制: 考虑使用版本控制系统,以便可以轻松跟踪和管理不同平台上的应用程序版本。

相关文章:

【100天精通python】Day40:GUI界面编程_PyQt 从入门到实战(完)_网络编程与打包发布

目录 8 网络编程 8.1 使用PyQt 网络模块进行网络通信 服务器端示例 客户端示例 8.2 处理网络请求和响应 9 打包和发布 9.1 创建可执行文件或安装程序 9.2 解决依赖问题 9.3 发布 PyQt 应用到不同平台 9.3.1 发布到 Windows 9.3.2 发布到 macOS 9.3.3 发布到 Linux 9…...

Redis——set类型详解

概要 Set(集合),将一些有关联的数据放到一起,集合中的元素是无序的,并且集合中的元素是不能重复的 之前介绍的list就是有序的,对于列表来说[1, 2, 3] 和 [2, 1, 3]是两个不同的列表,而对于集合…...

redis---》高级用法之慢查询/pipline与事务/发布订阅/bitmap位图/HyperLogLog/GEO地理位置信息/持久化

高级用法之慢查询 # 配置一个时间,如果查询时间超过了我们设置的时间,我们就认为这是一个慢查询 # 配置的慢查询,只在命令执行阶段# 慢查询演示-设置慢查询---》只要超过某个时间的命令---》都会保存起来# 设置记录所有命令CONFIG SET slowl…...

Find My资讯|苹果Vision Pro开发者需将设备配对 AirTag

最近苹果Vision Pro获开发者申请,苹果要求获批的申请者使用 Measure and Fit 应用确认合适的佩戴尺寸,并会根据申请者提交的信息,定制不同的 Vision Pro 开发者套件,以便于契合申请者的面部特征,提供更好的佩戴体验。 …...

Go 语言中排序的 3 种方法

原文链接: Go 语言中排序的 3 种方法 在写代码过程中,排序是经常会遇到的需求,本文会介绍三种常用的方法。 废话不多说,下面正文开始。 使用标准库 根据场景直接使用标准库中的方法,比如: sort.Intsso…...

12----Emoji表情

本节我们主要讲解markdown的Emoji 在 Markdown 里使用 Emoji 表情有两种方法:一种是直接输入 Emoji 表情,另一种是使用 Emoji 表情短码(emoji shartcodes)。 一、打印方式: 直接输入 Emoji 表情:在 Markdown 中,可以直接输入 Em…...

C++四种强制类型转换

一、C强制转换与C强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2c除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cas…...

git仓库新建上传记录

新建git仓会出现版本分支问题,解决过程: 其他的前期绑定之类的传送:https://blog.csdn.net/qq_37194189/article/details/130767397 大概思路:新建一个分支,上传,合并,删除分支 git branch …...

flutter调用so

lutter是一种基于Dart语言的跨平台开发框架,通常用于开发Android和iOS应用程序。如果您想要在Flutter应用程序中调用一个SO库,您可以按照以下步骤进行操作: 首先,将您的SO库文件复制到Flutter项目的“lib”目录下。 接下来&…...

c#依赖注入

依赖注入(Dependency Injection,简称 DI)是一种设计模式,用于将对象的创建和管理责任从使用它的类中分离出来,从而实现松耦合和易于测试的代码。在 C# 中,依赖注入通常通过以下方式实现: 构造函数注入(Constructor Injection): 这是最常见的依赖注入方式,通过类的构…...

Django框架使用定时器-APScheduler实现定时任务:django实现简单的定时任务

一、系统环境依赖 系统:windows10 python: python3.9.0 djnago3.2.0 APScheduler3.10.1 二、django项目配置 1、创建utils包,在包里面创建schedulers包 utils/schedulers/task.py #1、设置 Django 环境,就可以导入项目的模型类这些了 …...

Go学习笔记之数据类型

文章目录 GO数据类型数组array切片slice集合map结构体make和new GO数据类型 在go语言中,定义的全局数据结构不使用不会报错,定义的局部数据结构必须使用,否则报错;建议定义的数据类型就要使用,要么不定义。 数组array …...

Spring Cloud 微服务

前言 Spring Cloud 中的所有子项目都依赖Spring Boot框架,所以Spring Boot 框架的版本号和Spring CLoud的版本号之间也存在以来及兼容关系。 Spring Cloud生态下的服务治理的解决方案主要有两个: Spring Cloud Netfix 和 Spring Cloud Alibaba。这两个…...

SpringBoot属性配置

SpringBoot提供了多种属性配置方式 application.properties server.port80 application.yml server:port: 81application.yaml server:port: 82SpringBoot配置文件加载顺序 application.properties > application.yml > application.yaml常用配置文件种类 application.…...

算法通关村第十关 | 归并排序

1. 归并排序原理 归并排序(MERARE-SORT)简单来说就是将大的序列先视为若干个比较小的数组,分成比较小的结构,然后是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分就是将问题分成一些小的问题分…...

SpringBoot3集成Kafka

标签:Kafka3.Kafka-eagle3; 一、简介 Kafka是一个开源的分布式事件流平台,常被用于高性能数据管道、流分析、数据集成和关键任务应用,基于Zookeeper协调的处理平台,也是一种消息系统,具有更好的吞吐量、内…...

css学习1

1、样式定义如何显示元素。 2、样式通常保存至外部的css文件中。 3、样式可以使内容与表现分离。 4、css主要有两部分组成:选择器与一条或多条声明。 选择器通常为要改变的html元素,每条声明由一个属性和一个值组成。每个属性有一个值,属性…...

rust踩雷笔记(1)——切片传参和解引用赋值

最近学习rust,网上资料还是很有限,做题遇到的问题,有时需要自己试验。把自己做题过程遇到的问题,和试验的结论,做一些简单记录。 阅读下列文字和代码 用切片(的引用)做参数要非常小心&#xff…...

安全 1自测

常见对称加密算法: DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合; 3DES(Triple DES):是基于DES,对一块数据用…...

寻路算法小游戏

寻路算法小demo 寻路算法有两种,一种是dfs 深度优先算法,一种是 dfs 深度优先算法 深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义,深度优先,则是以深度为准则,先一条路走到底,直到达到目标。这…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

12.找到字符串中所有字母异位词

🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...