自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(388)
  • 资源 (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 1477

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

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

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

原创 PySide6: moveToThread的周期工作者

moveToThread的周期工作者。

2026-04-20 16:03:04 13

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

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

2026-04-19 10:06:46 205

原创 基于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 347

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

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

2026-04-16 12:07:19 19

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

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

2026-04-15 18:21:45 46

原创 基于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 44

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

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

2026-04-12 18:21:21 351

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

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

2026-04-11 20:41:06 41

原创 基于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 240

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

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

2026-04-10 09:42:20 567

原创 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 61

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

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

2026-04-05 17:51:53 788

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

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

2026-04-03 17:48:20 419

原创 西门子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 402

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

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

2026-04-01 10:18:24 320

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

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

2026-03-31 17:26:57 60

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

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

2026-03-30 21:00:52 140

原创 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 396

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

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

2026-03-12 14:56:56 169

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

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

2026-03-12 07:29:11 245

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

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

2026-03-11 11:32:15 331

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

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

2026-03-02 21:26:48 802

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

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

2026-02-28 19:51:19 461

原创 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 350

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

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

2026-02-26 10:53:41 222

原创 pyside6的多媒体模块:QtMultimedia

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

2026-02-24 15:13:25 834

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

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

2026-02-23 11:21:32 374

原创 PySide6的QTimeLine详解

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

2026-02-12 11:01:31 701

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

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

2026-02-10 18:22:41 969

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

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

2026-02-10 11:46:16 1158

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

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

2026-02-07 16:29:49 913

原创 PySide6从0开始学习的笔记(二十七) 日志管理

logging是 Python内置的日志模块,这个模块是 Python 官方提供的进行程序日志记录的核心工具。logging是Python内置的日志模块,可用于替代print()做专业的日志记录;该模块支持日志分级、自定义格式、多输出位置,是生产环境程序必备的调试 / 监控工具;

2026-02-05 10:47:34 1052

原创 PySide6从0开始学习的笔记(二十六) 重写Qt窗口对象的事件(QEvent)处理方法

在 PySide6 中,所有的窗口部件(QWidget及其子类)都继承了事件处理机制(如鼠标右键、滚轮、窗口打开 / 关闭事件),可以通过重写这些事件来实现自定义功能,比如右键菜单、滚轮缩放等。要实现以上功能,核心是。事件方法名通常以Event结尾(如wheelEvent),我们只需在自定义部件类中重新定义这些方法即可。

2026-01-31 18:56:35 702

原创 PySide6从0开始学习的笔记(二十五) Qt对象的生命周期和及时销毁

正如之前学习过的,当Qt的窗口对象被关闭(close())之后,它并没有在内存中消失,只是暂时隐藏起来不显示,当再次执行show()就会显示。对于一些短时间运行的简单小应用,这种重复生成并且不被销毁的对象,不会对系统资源有多大的消耗,但如果是一个7*24h运行,频繁操作的应用,比如工业视觉检测、scada项目等,就不得不重视对象的生命周期,对于不再有用的对象要及时销毁,以免对系统资源带来浪费。但是,只有点击"关闭本窗口按钮“关闭窗口,才能销毁,如果使用窗口右上角自带的关闭按钮关闭窗口,仍然不会被销毁。

2026-01-31 12:28:35 359

原创 海康 MV 相机几种Bayer RG像素格式的处理

RG10 核心特征:10bit 有效数据(0~1023),以 uint16 存储,Bayer 排列为 RGGB,小端存储;转换关键步骤:uint16 数组转换 → 10bit 归一化到 8bit → OpenCV 的 BAYER_RG2RGB 转换;避坑点:确认 Bayer 排列(颜色异常时换 OpenCV 的 Bayer 转换枚举)、端序(小端)、分辨率匹配。如果 RG10 数据转换后出现颜色偏色、画面乱码等问题,优先核对 Bayer 排列方式(换。

2026-01-29 11:01:34 996

原创 海康Mv相机,在pyqt中使用GetImageBuffer的方法获取数据的流程和使用方法

3. 把字节流转换为以图像的宽和高为参数的二维数组numpy array,得到:image_array,现在的像素格式仍然是Bayer RG8.4. 把像素阵列转换到RGB和BGR格式,得到:rgb_image,格式为RGB;1. 从缓存中获取一帧图像数据(海康相机默认的像素格式为Bayer RG8) ,得到:stOutFrame。得到:pix_map。5. 将RGB的像素阵列转换为Qt的QImage对象,得到:q_img。2. 拷贝帧图像数据的字节流,得到:buf_frame_bytes。

2026-01-26 17:59:26 124

原创 PySide6从0开始学习的笔记(二十四) QImage

QImage 是 Qt 框架中用于的核心类,主要负责图像的加载、存储、像素级操作及格式转换,是 Qt 图形处理的基础组件之一。

2026-01-26 17:56:12 1186

原创 PySide6/PyQt5,QImage 和 QPixmap 的关系与区别

核心定位:QImage 负责 “处理图像数据”,QPixmap 负责 “显示图像”,两者是 “处理 - 显示” 的协作关系。线程安全:QImage 可在非主线程使用,QPixmap 仅能在 GUI 主线程使用。转换方式:通过和实现双向转换,是 PySide6 中图像编程的核心操作。

2026-01-25 11:41:37 368

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

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

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

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

pyqt的进度条显示只能接受整数输入,不能直接显示小数,采用了折中的办法,重新定义了进度条的text()函数。然后将输入的整数除以10的倍数,传递到text()函数中进行显示,比如说想显示一小数就除以10。顺便搞了几种常用的颜色方案,封装入库,以备调用。

2023-03-17

试试用pyqt做一个上位机软件,阶段5的源码

试试用pyqt做一个上位机软件,阶段5的源码

2023-03-11

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

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

2023-03-08

海康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

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

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

2024-04-16

空空如也

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

TA关注的人

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