自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(395)
  • 资源 (4)
  • 收藏
  • 关注

原创 Qt Designer的父子部件样式表设置学习

在Qt Designer中新建图像界面,放置两个QWidget,命名为widget_1和widget_2;单独改变了widget_2,但是隶属于widget_2的pushButton_1和pushButton_2并没有改变。需要注意的是,采用这种办法,如果被改变的小部件还有它的子部件,子部件并不跟随被改变的小部件的改变而改变。这里,将隶属于widget_1的类型为QPushButton的所有部件全部定义了新的显示特性。这个样式表的含义为:widget_1中,所有的QWidget都按照指定的样式表显示。

2024-07-27 00:13:29 1504

原创 使用OpenCV与PySide(PyQt)的视觉检测小项目练习

OpenCV与PyQt(或PySide)的联合使用,各取所长

2024-07-07 22:43:09 1406 4

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十三)应用qdarkstyle样式表主题

并在HMI项目UI目录下中创建/styles文件夹,拷贝生成的各个文件。

2026-05-13 15:12:54 67

原创 用HSL颜色系统改造qdarkstyle样式表库

将颜色用hsl值表示,并且升级色彩库,升级以后的色彩库共有15个色系,每个色系的色相值固定,比如红色为0,绿色为120,蓝色240,每个色系的色彩浓度从0%到100%,每个浓度的又包含亮度的从0%到100%,浓度和亮度均以5%递进,这样每个色系有400多个颜色,就有了一个颜色丰富、足够使用的色彩库,而且从色彩名就大致能判断出它的颜色类型、鲜艳程度、明亮程度,无论是做动态或者渐变都很方便。灰色, 红色, 棕色, 橙色, 橙黄, 黄色, 黄绿, 绿色, 青绿, 青色, 靛蓝, 蓝色, 紫色, 品红, 紫红。

2026-05-07 18:13:09 435

原创 PySide6,图形按钮使用系统内置图标

调用名: StandardPixmap.SP_ToolBarHorizontalExtensionButton。调用名: StandardPixmap.SP_ToolBarVerticalExtensionButton。调用名: StandardPixmap.SP_FileDialogContentsView。调用名: StandardPixmap.SP_FileDialogDetailedView。调用名: StandardPixmap.SP_DockWidgetCloseButton。

2026-05-01 11:33:04 484

原创 Qt:创建一套基于HSL颜色体系的颜色库

文件中每个颜色的色彩浓度和亮度每间隔5%创建了一个颜色名,黑白灰色的H(色相)和S(色彩浓度)恒为0,黑白灰颜色名的数字是HSL颜色的"L"(亮度)。其余颜色的数字是"S"(色彩浓度5%-100%)和"L"(亮度5%-95%),比如:红色5_30 = hsl(h=0, s=5%, l=30%)。

2026-04-27 22:22:59 151

原创 Qt的HSL色彩系统

与常见的HSB色彩系统不同,HSL颜色系统有它独特的色彩设置规律,更适合UI工程的界面主题、模式切换、整体亮度调节、CSS 风格配色等应用。看得出,随着s的递增,色彩逐渐浓郁;随着l的递增,亮度逐渐提高;s = 100%(色彩浓度不变),l递增(亮度递增)l = 50%(亮度不变),s递增(色彩浓度递增)根据设计需求选择不同的常量和递变量即可。demo:一个绿色带灯按钮。

2026-04-26 12:20:46 143

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十二)最后的工作

rsv_area_var "AreaVar" 接收下行报文的DB块。frameHeader1 Byte 帧头字节1。链接: https://pan.baidu.com/s/18SBz4wM2G3Od4hidv6FHmQ 提取码: qwya。frameEnd1 Byte 帧尾字节1。

2026-04-25 17:14:54 365

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十一)框架的进一步完善:UI的自动周期更新以及下行数据的生成和处理

所有上位机代码见附件。目录结构:"""解析Excel变量表的变量地址,解析出区域、偏移、位:return:"""out = []s = ''# 取出地址文字串中每个“."之前的连续的数字,;

2026-04-21 18:51:32 232

原创 PySide6: moveToThread的周期工作者

moveToThread的周期工作者。

2026-04-20 16:03:04 41

原创 PLC学习笔记:数据存储的大小端模式

以一个16 位整数(Word)0x1234高字节 0x12(0001 0010)低字节 0x34(0011 0100)

2026-04-19 10:06:46 458

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(十)框架初成的阶段总结

DataStore:变量存储区(变量池)变量池位于上位机,是一个连续区域的存储区,最小存取单位是字节。AreaVar:区域变量区域变量:NamedTuplearea:I、Q、M或DB区,DBnum:DB编号,offset:地址偏移,byte_count:字节数,content:数据内容区域变量的作用是携带区域信息,用来成块读写变量池中和PLC的连续数据。所有的通信读写均通过区域变量进行。UiVari:UI变量。

2026-04-17 17:52:47 386

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(九)在上位机中创建变量系统

将其保存在项目根目录,命名为:PLC1Tags.xlsx。将其导出为excel文件。在excel表中利用。

2026-04-16 12:07:19 54

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(八)在上位机中解析上行报文

当接收到上行报文后首先对帧头和帧尾进行校验,如果校验不过就舍弃帧数据。然后经过CRC校验,确保所有数据无误,将帧数据保存。

2026-04-15 18:21:45 83

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(七)上位机通信部分的初步建设:socket客户端

signal_start = Signal() # 开始运行的信号_signal_stop = Signal() # 停止信号_signal_run_now = Signal() # 打破定时器周期立即运行一次""":param target: 需要在子线程中运行的目标函数:param looping: 是周期运行还是一次性任务:param loop_interval: 周期运行的间隙时间:param args: 附带参数"""

2026-04-14 22:19:42 78

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(六)创建通信块和生成上行报文

destArea "AreaVar" 目标区域,存放上行报文的字节。srcAreaVars Array[*] of "AreaVar" 源数据区域,支持多区域输入。的数据格式为:Array[0..5] of "AreaVar"上行报文发送的数据就是位于这些区域的连续字节块。创建FC,命名为:组态上行报文。

2026-04-12 18:21:21 372

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(五)编写控制功能的程序

本次项目以两个油泵的控制为例。至此,控制功能的程序编写完毕。

2026-04-11 20:41:06 61

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(四)为PLC创建开放式TCP连接

需要注意的是:在创建连接的时候,如果没有客户端连接到PLC,TCON的“BUSY”会一直输出True,直到有客户端连接"DONE"才会置位。调用时会自动创建一个背景DB,将其命名为:上位通信_背景DB。输入实例名称和网络地址,点“start”。会自动创建一个DB块:TCON_DB。这样就将PLC创建为TCP主站。伙伴:未指定、主动建立连接。

2026-04-11 12:00:13 269

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(三)PLC上行数据的准备

本次的通信对象是西门子S7-1500。

2026-04-10 09:42:20 612

原创 S7-1500学习笔记:Array数据类型

创建 ARRAY 变量时,将在方括号内定义小标的限值,并在关键字“of”之后定义数据类型。ARRAY 限值可使用。ARRAY 数据类型的变量表示一个由多个数目固定且数据类型相同元素组成的数据结构。[-2147483648..2147483647] of <数据类型>下限值必须小于或等于上限值。[-32768..32767] of <数据类型>ARRAY[n],例:Array_1[0, 3]ARRAY[下限..上限] of <数据类型>维度,各维度的限值使用逗号进行分隔。除 ARRAY 之外的所有数据类型。

2026-04-05 22:14:12 115

原创 S7-1500学习笔记:用户自定义数据类型(UDT)

项目管理器--PLC--PLC数据类型--添加新数据类型在打开的窗口内定义UDT的变量成员:本例,将UDT 命名为“AreaVar”,由Arrary、DBNum、Offset、byteCount4个变量成员组成。

2026-04-05 17:51:53 923

原创 S7-1500PLC学习笔记:MOVE_BLK、MOVE_BLK_VARIANT、BLKMOV的区别

在 S7‑1500 里,是三种最常用的块移动指令,但定位、用法、限制完全不同。

2026-04-03 17:48:20 749

原创 西门子S7-1500PLC的PEEK/POKE学习笔记

数据类型匹配,比如:PEEK_WORD 对应 2 字节,POKE_DWORD 对应 4 字节,类型错位会导致数据错乱。DB 属性 → 取消 优化的块访问,否则地址不固定,PEEK/POKE 无法定位。16#84 DB 数据块(Data Block)访问 DB 区时:填 DB 号(如 10 → DB10)IO 映射:PI/PQ 直接读写(1500 专属)Area 写错(如用 84 代替 16#84)访问 I/Q/M/PI/PQ 时:必须填 0。

2026-04-03 17:01:52 591

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(二)系统规划

曾多年使用wincc等专业软件进行组态,对HMI(人机交互界面)项目有一定的了解。与前面做过的AI项目demo不同的是,PLC的HMI项目是基于PLC通信的,大部分的操作和更新都是基于PLC变量的读写。

2026-04-01 10:18:24 345

原创 基于QtPy (PySide6) 的PLC-HMI工程项目(一)使用自定义socket协议的基本方法

DEMO展示了创建socket连接,以及断线重连、数据收发、心跳保活的基本方法,同时展示了从自定义格式的数据包中解析出指定类型数据的方法。

2026-03-31 17:26:57 84

原创 使用@property将类方法包装为属性

property→ 定义读取方法(getter),并伪装成属性@属性名.setter→ 定义修改方法(加校验 / 限制)好处:代码简洁、安全可控、符合 Python 优雅的语法风格名字必须一样只有 @property 时,属性是只读的。

2026-03-30 21:00:52 159

原创 QtPy(PySide6),线程的全生命周期管理

import sys# 跟踪qt日志print(s)t.start()btn = QPushButton("线程是否运行中")btn.clicked.connect(lambda :print(f"是否运行:{t.isRunning()}"))btn.show()是否运行:True是否运行:True是否运行:True是否运行:True是否运行:False是否运行:False是否运行:False是否运行:False通过信号判断:import sys# 跟踪qt日志。

2026-03-14 13:43:02 408

原创 QtPy(PySide6),在线程中使用QEventLoop实现低成本待机

创建QObject类,将功能函数包装为QObject类的槽函数,然后使用使用moveToThread移动到QObject类指定线程中运行,使用信号触发功能函数(已包装为QObject类的槽函数),功能函数就会在指定线程内运行。需求:在主线程中启动一个功能函数在指定线程中运行,功能函数运行完成后指定线程并不立即结束,等待运行下一个功能函数。这段代码在线程的run()函数中使用了循环,等待功能函数的调用,由于循环是持续运行的,所以CPU的占用很高。加入了可变参数和停止线程的功能。这是Qt的推荐用法。

2026-03-12 14:56:56 188

原创 PySide6日志系统跨线程通信实战

Qt框架内置了一套完整的日志系统,核心包括qDebug()qInfo()qWarning()qFatal()等函数。这些函数不仅能输出日志信息,更重要的是可以通过自定义日志处理器实现信息的灵活传递。

2026-03-12 07:29:11 252

原创 QtPy(PySide6),日志系统的创建和传递信息

Qt系统的信号槽(Signal & Slot)是其核心的通信机制,专门用于解决对象间和线程间解耦通信的问题,比起传统 GUI 编程中的回调函数,代码更易维护、逻辑更清晰。不过信号槽系统要求专门定义并连接信号和槽函数,而且信号必须是QObject基类对象的属性,那么它的使用范围就要受到限制,比如不想为了一个信号定义一个QObject类,并且需要异步传递一些简单信息,比如文件保存成功、网络连接失败这些,就可以利用QtMsg日志系统来来进行传递。

2026-03-11 11:32:15 347

原创 python,读取图像文件并获取到像素数组的效率测试

读取方法用时(ms)备注使用opencv读取53与python的原生打开方法接近使用pillow读取117最慢使用qt读取110次慢python的原生打开方法打开图像的像素字节53与opencv接近python的原生打开方法打开图像的像素字节,指定读取长度36最快所以,使用python的原生打开方法打开图像的像素字节,并指定长度来读取,是最快的方法。但是这个方法的局限性在于,只对bmp文件最适用,因为bmp文件是逐字节存放像素的原始数据。

2026-03-02 21:26:48 882

原创 YOLO v11 学习记录(九) 把图像使用不同的方式输入yolo进行预测的速度测试

来自相机或网络的Byer-RB字节流数据,是很常见的应用场景,基于以上原理,在读取到Byer-RB字节流数据后直接将其用numpy转换成数组后输入yolo,就可以获取到很快的处理速度。Qt和Pillow打开文件的用时接近,Yolo直读和Opencv打开文件的用时接近,直接打开文件的原始字节并用numpy转换后输入yolo的方式最快(字节流直读)。所以,同样的一个本地图像文件,使用不同的方式打开和转换数据后输入到yolo进行预测,耗时之差达到了将近3倍,从图像文件中直读raw最快。

2026-02-28 19:51:19 480

原创 PyQt:从图像文件或字节流生成QImage的速度测试

一幅从相机获取的3072 * 2048像素的图片,原始像素格式为bayer-rb,将其分别保存为png、bmp、jpg以及raw(直接存储元素的原始bayer-rb字节数据)格式的本地文件,然后使用Qt转换为QImage并显示,统计用时。使用原始图像字节流并使用numpy转换,效率远远比Qt直接读取图像文件高,其中的原因是代码使用了numpy进行像素的矩阵转换,numpy在这部分功能上比Qt强大。附:将相机原始字节流保存为.raw文件的方法。

2026-02-28 12:19:57 369

原创 python,class的__init__()与__call__()两个特殊方法的关系

是 “实例被当作函数调用” 的环节,是对实例功能的扩展,和。没有直接的调用关系,但依赖。

2026-02-26 10:53:41 250

原创 pyside6的多媒体模块:QtMultimedia

qrc文件是Qt的资源文件格式,可将媒体文件嵌入到程序中(编译后无需依赖外部文件)。网络下载的媒体数据、加密文件解密后的内存数据、临时缓存的媒体流、需要频繁重复播放的音视频等。发出指令给后台线程然后立即返回,但此时如果后台还在加载中或播放中,就会导致程序运行异常。将媒体文件读取到内存(字节流),通过 QIODevice播放。直接指定本地文件路径(绝对 / 相对路径),是最简单的播放方式。:部分媒体格式(如大体积视频)从内存播放可能占用较多内存。上面的范例,点击按钮会导致程序停止响应,原因如前述。

2026-02-24 15:13:25 880

原创 Python 编程中变量、函数、类等不同元素的命名规范

核心规则:变量 / 函数用snake_case(小写 + 下划线),类用PascalCase(大驼峰),常量用(全大写 + 下划线);约定规则:私有元素开头加,魔术方法前后加__,模块 / 包名小写简短;通用原则:见名知意、符合 PEP 8 标准,避免关键字和无意义命名。遵循这些规范,代码会更符合 Python 社区的习惯,也更容易被自己和他人理解、维护。

2026-02-23 11:21:32 418

原创 PySide6的QTimeLine详解

这类函数用于定义动画的核心参数,是使用QTimeLine的基础。函数功能说明示例设置动画总时长(单位:毫秒),决定动画执行的快慢# 动画持续 3 秒设置帧的范围(起始帧、结束帧),决定的取值范围# 帧从 0 到 200单独设置起始帧 / 结束帧(替代的拆分写法)是动画过程中最常用的信号,分别返回整数帧值和浮点比例值;监听动画启停 / 暂停状态,finished监听动画正常结束,是控制动画生命周期的核心;监听播放方向变化,适合需要反向播放的动画场景。这些信号覆盖了QTimeLine。

2026-02-12 11:01:31 711

原创 pyside6的时间相关的基础知识学习笔记

的类,简单来说,它的核心作用是在指定时间段内,生成一系列从 0.0 到 1.0(或反向)的数值,你可以基于这些数值来控制 UI 元素的变化(比如移动、缩放、透明度变化等),从而实现平滑的动画效果。的类,它只关注 “时间点”(比如 14:30:25.500),不包含日期、时区或夏令时相关信息,是 Qt 中处理纯时间的基础工具。(仅处理时间,如 15:30:20)的组合体,专门用来表示一个 “具体的时间点”,并提供了丰富的。,它更简洁、开销更小,专门用于在单个对象内处理定时事件,适合简单的定时需求。

2026-02-10 18:22:41 999

原创 python,类和实例的一些学习笔记

types.MethodType是单例生效的,只对当前传入的实例 (p) 生效。

2026-02-10 11:46:16 1181

原创 PySide6,QCoreApplication::aboutToQuit与QtQore.qAddPostRoutine:退出前后的清理工作

是 “退出准备阶段”,此时 Qt 主事件循环还在运行,所有 Qt 核心对象(如QObjectQWidget)都还存活,可正常操作 Qt 组件(比如弹窗提示、保存配置到QSettings:是 “退出收尾阶段”,此时 Qt 主事件循环已结束,部分 Qt 高层对象(如QWidget)可能已销毁,不建议操作 Qt 组件,仅适合纯 C 层面的清理(如释放全局内存、关闭 C 语言打开的文件句柄)。执行时机是核心在主循环退出前(Qt 对象存活),在主循环退出后(Qt 对象可能已销毁);使用场景区分。

2026-02-07 16:29:49 935

pyside6自定义部件库和软件框架进度记录v2

pyside6自定义部件库和软件框架进度记录v2

2024-04-16

pyside6自定义部件库和软件框架进度记录

pyside6自定义部件库和软件框架进度记录的资源

2024-04-16

pyside6自定义部件库和软件框架进度记录v1

pyside6自定义部件库和软件框架进度记录v1

2024-04-11

pyqt5的组合式部件制作(四)的资源

pyqt5的组合式部件制作(四)的资源

2023-11-22

pyqt5的组合式部件制作(四)资源

pyqt5的组合式部件制作(四)资源

2023-11-22

pyqt5的组合式部件制作(二)

pyqt5的组合式部件制作(二)

2023-11-08

pyqt5的组合式部件制作(一)阶段资源

pyqt5的组合式部件制作(一)阶段资源

2023-11-07

我用PYQT5做的第一个实用的上位机项目(五)

我用PYQT5做的第一个实用的上位机项目(五)

2023-10-09

我用PYQT5做的第一个实用的上位机项目(四)配套资源

我用PYQT5做的第一个实用的上位机项目(四)配套资源

2023-10-04

我用PYQT5做的第一个实用的上位机项目(三)

我用PYQT5做的第一个实用的上位机项目(三)的资源文件

2023-10-03

我用PYQT5做的第一个实用的上位机项目(二)资源

我用PYQT5做的第一个实用的上位机项目(二)资源

2023-09-28

使用PYQT5简单制作动态仪表盘

使用PYQT5简单制作动态仪表盘

2023-09-17

PYQT制作动态时钟,使用了直接读取和旋转图片的方法

PYQT制作动态时钟,使用了直接读取和旋转图片的方法

2023-09-15

用Qlabel制作的自定义带图片的按钮

用Qlabel制作的自定义带图片的按钮

2023-08-22

博途利用MOVE-BLK-VARIANT实现混合数据类型的块移动

MOVE_BLK_VARIANT范例

2023-06-26

python与PLC通信的数据转换

python与PLC通信的数据转换

2023-06-23

数组的创建以及将二维数组转换成为一个连续的一维数组

数组的创建,选择和不选择输入连接的区别。以及将二维数组的两个维连接起来转换成为一个连续的一维数组

2023-04-17

LABVIEW调用C++的dll

编译好的深度学习dll,用labview调用

2023-04-17

西门子STL中文编程手册

西门子PLC的STL中文编程手册,带目录

2023-03-27

试试用pyqt做一个上位机软件,但愿不会烂尾(八)的资源

两个功能简单的测试页面,先不考虑界面的美化,以实现简单功能为目标。美学和人体工程学的最后再说。

2023-03-20

用HSL颜色系统改造qdarkstyle样式表库

用HSL颜色系统改造qdarkstyle样式表库

2026-05-13

基于QtPy (PySide6) 的PLC-HMI工程项目(十二)最后的工作

基于QtPy (PySide6) 的PLC-HMI工程项目(十二)最后的工作

2026-04-25

基于QtPy (PySide6) 的PLC-HMI工程项目(十一)框架的进一步完善:UI的自动周期更新以及下行数据的生成和处理

基于QtPy (PySide6) 的PLC-HMI工程项目(十一)框架的进一步完善:UI的自动周期更新以及下行数据的生成和处理

2026-04-21

海康Mv系列相机SDK与Qt(PySide6)框架融合与改进阶段2

海康Mv系列相机SDK与Qt(PySide6)框架融合与改进阶段2

2026-03-11

海康Mv系列相机SDK与Qt(PySide6)框架融合与改进阶段1

海康Mv系列相机SDK与Qt(PySide6)框架融合与改进阶段1

2026-03-09

PySide6从0开始学习的笔记(二十) qdarkstyle的深入应用的资源

微调过的qdarkstyle项目,使其支持custom主题和在PySide6下支持运行

2026-01-02

PySide6从0开始学习的笔记(十四)创建一个UI项目的资源

PySide6从0开始学习的笔记(十四)创建一个UI项目的资源

2025-12-22

自用pyside6项目模板的资源

自用pyside6项目模板的资源

2025-12-12

CnOCR训练特殊字体

CnOCR训练特殊字体

2025-09-21

一个基本的pyside6项目模板demo

一个基本的pyside6项目模板demo

2025-02-23

基于深度学习的视觉检测小项目(十七) 用户管理后台的编程

用户管理阶段的资源

2025-02-03

基于深度学习的视觉检测小项目(十一) 动态样式表的实践

基于深度学习的视觉检测小项目(十一) 动态样式表的实践

2025-01-12

pytorch基础知识和函数的学习:卷积的基本理解

pytorch基础知识和函数的学习:卷积的基本理解

2024-08-25

pytorh基础知识和函数的学习:图像文件的Tensor

pytorh基础知识和函数的学习:图像文件的Tensor

2024-08-24

Qt Designer,仿作一个ui界面的练习(四):编写代码文章的资源

Qt Designer,仿作一个ui界面的练习(四):编写代码文章的资源

2024-07-30

PySide(PyQt)使用QPropertyAnimation制作动态界面

PySide(PyQt)使用QPropertyAnimation制作动态界面

2024-07-25

PySide(PyQt),自定义图标按钮的资源

PySide(PyQt),自定义图标按钮的资源

2024-07-23

Pyside使用Qt Designer和uic工具的基本框架的demo

Pyside使用Qt Designer和uic工具的基本框架的demo

2024-07-17

pyside6的特殊按钮(互锁、自锁、独占模式)文章的ui资源

pyside6的特殊按钮(互锁、自锁、独占模式)文章的ui资源

2024-06-20

pyside6的特殊按钮(互锁、自锁、独占模式)文章的ui资源

pyside6的特殊按钮(互锁、自锁、独占模式)文章的ui资源

2024-06-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除