04_HUD_Qt_for_Python开发之路2
欢迎来到我的博客,希望这篇文章对你有所帮助,如果觉得不错,请点赞搜藏哈。
文章目录
- HUD_Qt_for_Python开发之路2
- 1 设置程序名称
- 2 隐藏窗口标题栏
- 3 设置窗口透明裁剪
- 4 修改下窗口大小,重新加载
- 5 搞定网络模块
- 5.1 包含网络模块
- 5.2 初始化UDP Socket
HUD_Qt_for_Python开发之路2
1 设置程序名称
本片我们将正式开始我们HUD仪表的开发工作。这一篇首先要给我们的窗口重新命名为HUD使用代码如下:
widget.setWindowTitle("HUD")
,代码位置如下图所示。
2 隐藏窗口标题栏
Python在Qt的中API基本还是保持了Qt原有的样子,好多东西还是可以参照的,就比如这个已隐藏窗口的标题栏,在传统C++中,我们使用setWindowFlag(Qt::FramelessWindowHint);
在Python中使用setWindowFlag(QtCore.Qt.FramelessWindowHint,True)
,是不是很相似,现在看下我们整个main.py程序的全貌。
# This Python file uses the following encoding: utf-8
import sys
import osfrom PySide6 import QtCore
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtCore import QFile
from PySide6.QtUiTools import QUiLoaderclass HUD(QWidget):def __init__(self):super(HUD, self).__init__()self.load_ui()def load_ui(self):loader = QUiLoader()path = os.path.join(os.path.dirname(__file__), "hud.ui")ui_file = QFile(path)ui_file.open(QFile.ReadOnly)loader.load(ui_file, self)ui_file.close()if __name__ == "__main__":app = QApplication([])widget = HUD()widget.setWindowTitle("HUD") #设置标题名称widget.setWindowFlag(QtCore.Qt.FramelessWindowHint,True) #设置程序隐藏标题栏widget.show()with open("images.qss","r") as f:_style = f.read()app.setStyleSheet(_style)sys.exit(app.exec_())
3 设置窗口透明裁剪
这个专业术语怎么表达也不太确定,大致意思就是没有控件的地方,给他显示透明了对比图如下图所示。
这个也是可以参考C++样子
使用代码setAttribute(QtCore.Qt.WA_TranslucentBackground,True)
,位置如下图
自己技术太菜了,到目前位置,3个小时就研究出3句话来。想看到效果,遥遥无期呀。
4 修改下窗口大小,重新加载
在设计界面中修改主窗口大小为480*360,如下图所示。
5 搞定网络模块
5.1 包含网络模块
from PySide6 import QtNetwork
这里可以看下PyQt的 网络模块类图,如下
在我们新的HUD中,HUD与数据服务进行数据交互将使用DUP广播的形式来模拟CAN总线的数据机制,程序运行环境一般为本机或局域网路,对UDP数据有一定保证,但是决定不能像CNA总线自带CRC校验那样安全,不过来模拟数据足够了,同时在多个项目中也使用UDP广播,测试下来也没有啥问题。后续遇到问题在解决问题。数据服务器和HUD程序之间使用UDP广播,如下图所示。
5.2 初始化UDP Socket
按照帮助文档开搞,编写以下代码,就可以完成UDP模块了。
def initSocket(self):udpSocket = QUdpSocket(self) #初始化udpSocket.bind(QtNetwork.QHostAddress.LocalHost,6876) #绑定端口self.connect(udpSocket,SIGNAL('readyRead()'),self,SLOT('readPendingDatagrams'))
def readPendingDatagrams(self):while udpSocket.hasPendingDatagrams:datagram = QByteArray()datagram.resize(udpSocket.pendingDatagramSize())(sender,senderPort) = udpSocket.readDatagram(datagram.data(), datagram.size())processTheDatagram(datagram)
理想很丰满,现实很骨感,同样的代码,放在我这里就是不对的。
以我理解,大致意思就是我的参数不对。
我好像在这里发现了什么,UDP是无连接的,怎么能绑定IP呢,所以只有绑定端口一说。
修正一下,这样终于不报错误了,但是呢,还有更好玩的问题出现了。
def initSocket(self):udpSocket = QUdpSocket(self) #初始化udpSocket.bind(6876) #绑定端口
# self.connect(udpSocket,SIGNAL('readyRead()'),self,SLOT('readPendingDatagrams'))udpSocket.readyRead.connect(readPendingDatagrams)def readPendingDatagrams():while udpSocket.hasPendingDatagrams:datagram = QByteArray()datagram.resize(udpSocket.pendingDatagramSize())(sender,senderPort) = udpSocket.readDatagram(datagram.data(), datagram.size())processTheDatagram(datagram)
现在我的代码如上图所示,但是呢,提示我找不到readPendingDatagrams,如下图
接着探索,结合旧版的信号槽编写方式,猜测应该是我少加了‘好了,加上试试看
def initSocket(self):udpSocket = QUdpSocket(self) #初始化udpSocket.bind(6876) #绑定端口
# self.connect(udpSocket,SIGNAL('readyRead()'),self,SLOT('readPendingDatagrams'))udpSocket.readyRead.connect('readPendingDatagrams')def readPendingDatagrams():while udpSocket.hasPendingDatagrams:datagram = QByteArray()datagram.resize(udpSocket.pendingDatagramSize())(sender,senderPort) = udpSocket.readDatagram(datagram.data(), datagram.size())processTheDatagram(datagram)
哎嗨,好了,哈哈哈,不过是有提示,现在至少是可以运行了
还有有问题,意思是我的这个槽函数是不行的。在改改,如下图
这回终于可以了,看下结果,不容易,又是一下午。
组后附上完整代码如下:
# This Python file uses the following encoding: utf-8
import sys
import osfrom PySide6 import QtCore
from PySide6 import QtNetwork
from PySide6.QtNetwork import QUdpSocket
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtCore import QFile,QObject
from PySide6.QtUiTools import QUiLoaderclass HUD(QWidget):def __init__(self):super(HUD, self).__init__()self.load_ui()self.initSocket()def load_ui(self):loader = QUiLoader()path = os.path.join(os.path.dirname(__file__), "hud.ui")ui_file = QFile(path)ui_file.open(QFile.ReadOnly)loader.load(ui_file, self)ui_file.close()def initSocket(self):udpSocket = QUdpSocket(self) #初始化udpSocket.bind(6876) #绑定端口
# self.connect(udpSocket,SIGNAL('readyRead()'),self,SLOT('readPendingDatagrams'))udpSocket.readyRead.connect(self.readPendingDatagrams) #新的信号槽编写方式def readPendingDatagrams(self):while udpSocket.hasPendingDatagrams:datagram = QByteArray()datagram.resize(udpSocket.pendingDatagramSize())(sender,senderPort) = udpSocket.readDatagram(datagram.data(), datagram.size())processTheDatagram(datagram)print(datagram)if __name__ == "__main__":app = QApplication([])widget = HUD()widget.setWindowTitle("HUD") #设置标题名称widget.setWindowFlag(QtCore.Qt.FramelessWindowHint,True) #设置程序隐藏标题栏widget.setAttribute(QtCore.Qt.WA_TranslucentBackground,True) #设置窗口透明widget.show()with open("images.qss","r") as f:_style = f.read()app.setStyleSheet(_style)sys.exit(app.exec_())
04_HUD_Qt_for_Python开发之路2相关推荐
- 记本阶段建站心得,是走无限做垃圾站之路还是真正的开发之路
不知不觉,上班有三个月了,三个月除却一些公司里杂七杂八的事,我做了四个站,第一个是六安市志愿者会员管理系统,比较简单,用TP开发,从前台设计.布局,到数据库设计,再到后台代码,改了又改,最后花了近一个 ...
- 我的Java开发之路
最近有一位小伙伴通过公众号给我留言, "我参加工作没多久,看着圈里的技术大牛,特别羡慕,也渴望成为技术大牛,想让您分享一下从小白到大牛是怎样练成的,我该如何提高自己" 首先,谢谢这 ...
- 细说inchat系统客户端开发之路
Inchat系统中间件基础运行环境是经过统一规划的以WebLogic.JBOSS为主的集群环境,企业集成平台是以基础业务应用为基础服务于上层平台和基础业务应用的高度集成平台,数据中心是企业公共数据的集 ...
- Qt开发之路39---Qt pro项目检测编译器版本(64位或32位)
方案一:利用QT_ARCH contains(QT_ARCH, x86_64){message("64-bit") }else{message("32-bit" ...
- 攀岩时代:HMS Core 6.0与移动开发之路
今年的东京奥运会中,一些全新运动项目首次进入奥运是一大看点.其中就包括科技界经常用以比喻自己的:攀岩. 刚刚加入奥运大家庭的攀岩运动,需要选手在陡峭的崖壁,甚至负角度情况下,在仅有的几个发力点支撑下向 ...
- 我的App开发之路:从零开始到上线赚钱
我的App开发之路:从零开始到上线赚钱 背景介绍 本人从第一次写代码赚钱开始,到现在已经12年了,使用过多种操作系统.编程语言. 现在作为一名个人开发者,开发一些小应用. 本文就应用软件开发做个简单总 ...
- H5前端开发以及小程序开发之路
好久没写博客了,今天心血来潮.总结下.近一年的前端开发之路. 首先,用了ionic+cordova技术框架开发纯粹的混合APP(得有angular的基础知识),一个商城项目,也用了vue,编写单页面, ...
- Qt开发之路44---Qt Creator 设置移动控件的最小距离
一:问题 Qt Creator编辑UI时,按上下左右间移动控件默认最小是10个像素点,可不可以设置小一些? 二:方法,配置更改 工具-选项-设计师-表单-栅格X/栅格Y,调整大小!如下图 三:方法,属 ...
- 05_HUD_Qt_for_Python开发之路3
欢迎来到我的博客,希望这篇文章对你有所帮助,如果觉得不错,请点赞搜藏哈. 文章目录 HUD_Qt_for_Python开发之路3 1 UI文件与Python结合 1.1 将UI文件编译为一个Pytho ...
最新文章
- FTPVSFTPD安装和参数说明
- JavaSE教程-03深入探究原码,反码,补码-扩展
- C# 退出提示 事件提示两次问题
- 电脑小白学python_零基础的小白怎么学python?
- sgi 之heap, priority_queue
- apache的斜杠问题
- Java就业岗位有哪些?可以从事哪些工作?
- 「OC」类的深入研究、description方法和sel
- C++ STL简介(转)
- 计算机网络作业5及解答,计算机网络作业八及解答
- Nodejs中获取get请求传过来的参数_note
- 用了这么久的 Chrome,你不会还没掌握这个功能吧?
- 用.iso文件从硬盘安装redhatlinux7.3(转)
- 关于交流半波与全波整流输出的电压(或电流)有效值和平均值的讨论
- Flume+Kafka整合案例实现
- Linux第一次月考小总结
- SAP扫盲系列之一:什么是SAP系统和应用服务器
- 关于Mac升级系统后,出现 xcrun: error: invalid active developer path 问题的解决方案【已解决】
- 前端项目发版后用户需要手动刷新页面获取的解决方案
- MG动画实例——星星图标