PyQt5 编写一个UDP Server

news/2024/9/17 8:46:40/文章来源:https://www.cnblogs.com/tarzen213/p/18403815

main.py

import socket
import sys
import timefrom PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import QThread, pyqtSignal
from view.udpserver import Ui_Formclass UDPServer(QThread):message = pyqtSignal(str)  # 主要是将接受到的信息,返给主线程def __init__(self):super().__init__()self.udp_runing = Truedef run(self):# 启动udpserverprint('执行了 run方法')self.udp_socker = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)self.udp_socker.bind(('0.0.0.0', 12345))while self.udp_runing:try:data, addr = self.udp_socker.recvfrom(1024)message = f"接收到:{addr}:{data.decode('utf-8')}"self.udp_socker.sendto(b'Received:%s' % data, addr)self.message.emit(message)except Exception as e:print(e)def stop(self):self.udp_runing = Falseself.udp_socker.close()self.quit()self.wait()class MyWin(QWidget, Ui_Form):def __init__(self):super().__init__()self.setupUi(self)self.udp_thread = None# 放到最后:防止其他属性尚未加载self.iniUI()def iniUI(self):self.resize(500, 500)self.pushButton.clicked.connect(self.start_udp)self.pushButton_2.clicked.connect(self.stop_udp)if self.udp_thread is None or not self.udp_thread.udp_runing:self.start_udp_button(1)def start_udp(self):if self.udp_thread is None or not self.udp_thread.udp_runing:self.textEdit.setText('正在启动')self.udp_thread = UDPServer()  # 子线程一定要加selfself.udp_thread.message.connect(self.show_message)self.udp_thread.start()self.start_udp_button(statr=2)time.sleep(2)self.start_udp_button(statr=0)self.textEdit.setText('启动成功')def stop_udp(self):if self.udp_thread.udp_runing:self.textEdit.setText('正在关闭udp')self.udp_thread.stop()self.start_udp_button(statr=2)time.sleep(2)self.start_udp_button(statr=1)self.textEdit.setText('已经关闭')def show_message(self, mes):self.textEdit.setText(mes)def start_udp_button(self, statr=None):if statr == 0:# 启动upd,self.pushButton.setEnabled(False)self.pushButton_2.setEnabled(True)elif statr == 1:# 关闭后的状态self.pushButton.setEnabled(True)self.pushButton_2.setEnabled(False)elif statr == 2:# 状态切换状态self.pushButton.setEnabled(False)self.pushButton_2.setEnabled(False)if __name__ == '__main__':app = QApplication(sys.argv)w = MyWin()w.show()app.exec_()

view.udpserver中的Ui_Form.py 该文件是将ui文件转换成py文件

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'udpserver.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(486, 401)self.layoutWidget = QtWidgets.QWidget(Form)self.layoutWidget.setGeometry(QtCore.QRect(90, 80, 331, 41))self.layoutWidget.setObjectName("layoutWidget")self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)self.horizontalLayout.setContentsMargins(0, 0, 0, 0)self.horizontalLayout.setObjectName("horizontalLayout")self.pushButton = QtWidgets.QPushButton(self.layoutWidget)self.pushButton.setObjectName("pushButton")self.horizontalLayout.addWidget(self.pushButton)spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout.addItem(spacerItem)self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget)self.pushButton_2.setObjectName("pushButton_2")self.horizontalLayout.addWidget(self.pushButton_2)self.textEdit = QtWidgets.QTextEdit(Form)self.textEdit.setGeometry(QtCore.QRect(150, 190, 241, 91))self.textEdit.setObjectName("textEdit")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))self.pushButton.setText(_translate("Form", "启动UDP"))self.pushButton_2.setText(_translate("Form", "关闭UDP"))

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

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

相关文章

有意思、有趣的文字

苦难既然把我推到了悬崖的边缘,那么就让我在这悬崖边坐下来,顺便看看悬崖下的流岚雾霭,唱支歌给你听。       —— 史铁生《我与地坛》罗翔说:“珍惜你的低谷期,你会看到很多真相。时间能渡的都是愿意自渡的人,没有谁的人生一帆风顺,低谷期的苦难,就是为了积蓄力…

宝可梦gba改版教程/口袋妖怪gba改版教程

背景 心血来潮玩了一些改版,感觉不太人性化,于是想要去稍微学学。 过程 劝退 可以说是非常劝退,gba改版非常的不人性化,比如汇编语言asm,改版工具不支持中文之类的。没有成体系的教程 这是口袋资源吧的教程汇总,虽然看上去很详细,但是其实还是蛮零散的,而且由于贴吧的一…

414周赛第三题 - 3282. 到达数组末尾的最大得分

题目链接 3282. 到达数组末尾的最大得分思路 转换为“矩阵面积”;贪心解决题解链接 【一图秒懂】贪心(Python/Java/C++/Go)关键点时间复杂度 \(O(n)\)空间复杂度 \(O(1)\)代码实现: class Solution:def findMaximumScore(self, nums: List[int]) -> int:answer = maxv =…

使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用

简介 在现代微服务架构中,服务发现(Service Discovery)是一项关键功能。它允许微服务动态地找到彼此,而无需依赖硬编码的地址。以前如果你搜 .NET Service Discovery,大概率会搜到一大堆 Eureka,Consul 等的文章。现在微软为我们带来了一个官方的包:Microsoft.Extension…

第19篇 Protocol Buffers 编译器生成proto文件

1.下载 Protocol Buffers 编译器(protoc) 前往 Protocol Buffers GitHub Releases 页面。在 "Assets" 下找到适合您系统的压缩文件,通常为 protoc-{version}-win32.zip 或 protoc-{version}-win64.zip,其中 {version} 是版本号。2.解压缩 Protoc 编译器 创建一个…

Zlibrary镜像站官方网址的使用教程

Zlibrary的使用说明: 手机端 步骤一、以苹果浏览器为例,打开Z-library镜像站,搜索自己的图书,注册登录之后选择EPUB格式下载步骤二、手机打开下载的文件,即可正常阅读。电脑端 步骤一,如下图所示, 打开Zlibrary官网搜索电子书,点击自己需要的图书步骤二,如下图所示, 在…

Python实现批量提取视频

前言 最近在玩整nas,但是之前把视频和照片都上传到immich了,因为我可以直接在手机中上传照片,但是因为手机内存不够就把视频全删了的,现在只需要把视频下载下来上传到nas中就OK。但是现在问题是immich这东西不支持批量删选视频,只能全选照片和视频,而且一共有50个G的照片…

边缘计算平台:为客户端提供更快、更可靠的应用响应!

边缘计算平台是一种基于云计算技术的辅助计算系统。它可以在数据源的边缘(例如传感器、IoT设备等)进行数据的处理和分析,从而为客户端提供更快、更可靠的应用响应。与传统的云计算模式相比,边缘计算平台更加灵活和实时,它通过在分布式的边缘设备上进行计算,可以大大减少由…

1-9Java数组

Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。 Java 语言中提供的数组是用来存储固定大小的同类型元素。 你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,numbe…

VR虚拟现实解决方案在电商行业中的7大优势

从电子商务的角度来看,虚拟现实可以通过多种方式为在线卖家带来好处。VR 可带来身临其境、富有创意且令人难忘的客户体验,可以极大地提高转化率。VR 可以通过更多方式使卖家受益。从电子商务的角度来看,虚拟现实可以通过多种方式为在线卖家带来好处。VR 可带来身临其境、富有…

Mathematica 入门

前言 Wolfram Mathematica(简称 MMA),是由 Wolfram Research 开发的科学计算软件。本文我们将介绍 Mathematica 的界面、语法和基本应用。类似的软件还有 MATLAB 和 Maple 等。 MMA 官网:https://www.wolfram.com/mathematica/ MMA 的安装及激活:Mathematica安装激活极简教…

【算法笔记】位运算详解

0. 前言 突然想到位运算是个好东西,就来水一波文章了…… 注意:我把能想到的有关位运算的所有内容都放进来了,所以篇幅较长,请谅解!若有写的不清楚或者不够详细的地方欢迎在评论区补充,谢谢支持! 本文中参考代码均使用C++编写。 废话不多说,下面步入正题。1. 基本运算 …