- 博客(357)
- 资源 (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
1448
原创 PySide6从0开始学习的笔记(二十七) 日志管理
logging是 Python内置的日志模块,这个模块是 Python 官方提供的进行程序日志记录的核心工具。logging是Python内置的日志模块,可用于替代print()做专业的日志记录;该模块支持日志分级、自定义格式、多输出位置,是生产环境程序必备的调试 / 监控工具;
2026-02-05 10:47:34
669
原创 PySide6从0开始学习的笔记(二十六) 重写Qt窗口对象的事件(QEvent)处理方法
在 PySide6 中,所有的窗口部件(QWidget及其子类)都继承了事件处理机制(如鼠标右键、滚轮、窗口打开 / 关闭事件),可以通过重写这些事件来实现自定义功能,比如右键菜单、滚轮缩放等。要实现以上功能,核心是。事件方法名通常以Event结尾(如wheelEvent),我们只需在自定义部件类中重新定义这些方法即可。
2026-01-31 18:56:35
631
原创 PySide6从0开始学习的笔记(二十五) Qt窗口对象的生命周期和及时销毁
正如之前学习过的,当Qt的窗口对象被关闭(close())之后,它并没有在内存中消失,只是暂时隐藏起来不显示,当再次执行show()就会显示。对于一些短时间运行的简单小应用,这种重复生成并且不被销毁的对象,不会对系统资源有多大的消耗,但如果是一个7*24h运行,频繁操作的应用,比如工业视觉检测、scada项目等,就不得不重视对象的生命周期,对于不再有用的对象要及时销毁,以免对系统资源带来浪费。但是,只有点击"关闭本窗口按钮“关闭窗口,才能销毁,如果使用窗口右上角自带的关闭按钮关闭窗口,仍然不会被销毁。
2026-01-31 12:28:35
312
原创 海康 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
731
原创 海康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
87
原创 PySide6从0开始学习的笔记(二十四) QImage
QImage 是 Qt 框架中用于的核心类,主要负责图像的加载、存储、像素级操作及格式转换,是 Qt 图形处理的基础组件之一。
2026-01-26 17:56:12
1079
原创 PySide6/PyQt5,QImage 和 QPixmap 的关系与区别
核心定位:QImage 负责 “处理图像数据”,QPixmap 负责 “显示图像”,两者是 “处理 - 显示” 的协作关系。线程安全:QImage 可在非主线程使用,QPixmap 仅能在 GUI 主线程使用。转换方式:通过和实现双向转换,是 PySide6 中图像编程的核心操作。
2026-01-25 11:41:37
322
原创 Qt(PySide/PyQt)的信号槽机制的比较深入的学习笔记
当信号携带对象(如自定义结构体、QObject 子类实例等)发射时,Qt 会自动复制该对象(基于对象的可复制性,如实现拷贝构造、或通过 Qt 元对象系统支持),槽函数接收的是 “副本” 而非原对象。副本的生命周期完全由 Qt 管理:发射时创建、槽函数处理完后自动销毁,开发者无需手动 new/delete,避免内存泄漏。核心效果:原对象与槽函数接收的副本完全解耦 —— 发送方修改原对象,不会影响已发出的副本;槽函数修改副本,也不会反向影响发送方,数据传递过程 “无干扰”。
2026-01-23 17:28:39
630
原创 PyQt5/PySide6的moveToThread:移动到线程
移动的通常是 QObject 对象的槽函数,而非普通函数,核心是让对象槽函数在目标 QThread 中执行;所以提前必须要理解,Qt的信号槽机制是依赖于线程机制的,就是说,槽函数往往在不同的线程内运行。必须满足 “QObject 子类、无父对象、绑定 QThread” 三个前提,遵循 “信号 - 槽” 驱动逻辑;子线程禁止直接操作 UI,推荐解耦式使用而非重写。
2026-01-16 10:09:14
619
原创 海康威视工业相机,获取图像的两种方法:MV_CC_GetImageBuffer与MV_CC_RegisterImageCallBackEx 的对比
并非所有场景都需要 “极致低延迟”。如果使用场景是「离线采集」(如批量拍摄保存图片,无需实时查看)、「低帧率采集」(如 1fps 以下),阻塞式取图的延迟差异几乎可以忽略,且阻塞式代码逻辑更简单、调试更方便,无需处理线程安全和回调函数的复杂问题,此时阻塞式反而更合适。回调函数式取图通常延迟更小(尤其是隐性延迟),实时性更优,适合对帧实时性要求高的场景(如实时视觉检测、运动目标跟踪);其低延迟的核心是「主动推送最新帧、无缓冲区堆积、无轮询等待开销」,与阻塞式的 “主动拉取旧帧” 形成本质区别;
2026-01-13 11:06:44
707
原创 PySide6,QEventLoop.exec()的使用
是启动局部 Qt 事件循环的核心方法,阻塞当前线程但不阻塞事件处理;必须通过quit()触发退出,否则会一直阻塞;区别于全局的,用于临时场景,不建议嵌套过多(可能导致逻辑复杂)。
2026-01-12 20:23:52
615
原创 PySide6从0开始学习的笔记(二十三)使用QRunnable在线程池中执行临时任务
QRunnable是轻量级的任务载体核心定位:只封装「任务逻辑」,不具备线程能力。QRunnable的唯一核心作用是「打包要在子线程中执行的业务代码」,它只回答「要做什么」(即run()方法中封装的逻辑),本身不是线程,无法独立运行,必须依赖才能被调度执行。「轻量级」的核心体现结构极简:仅需重写一个run()方法即可使用,无其他强制重写的抽象方法;无额外开销:不继承QObject,没有 Qt 信号槽、事件循环等附加机制,创建和销毁的资源消耗极低;无需手动管理生命周期:默认,任务执行完毕后,
2026-01-09 12:45:10
290
原创 PySide6线程管理进阶:互斥锁的应用以及生产者和消费者模式
在多线程并行工作时,如果多个线程有可能同时写操作一个数据时,就要使用互斥锁,以保障数据安全。防止数据竞争的一种方式是生产者和消费者模式。
2026-01-06 16:43:35
311
原创 PySide6从0开始学习的笔记(二十二) 几种封装信号传递内容的方法
QObject:这是 Qt 中所有支持信号槽、属性系统、对象树管理的类的基类。意味着该类可以使用 Qt 的核心特性(如属性通知、父子对象管理等),而非普通 Python 类。import sys# 定义一个类,用来封装猫咪信息并作为信号发射# 可选:添加数据验证,避免非法值raise ValueError("猫咪名称必须是非空字符串")raise ValueError("猫咪年龄必须是非负整数")raise ValueError("图片必须是有效的 QPixmap")
2026-01-05 20:00:15
563
原创 PySide6之QListWidget 学习
python运行self.setWindowTitle("QListWidget 进阶示例")# 1. 创建 QListWidget# 2. 添加带自定义样式的项items = [("Python", True, "python.png"), # 文本、复选框状态、图标路径# 启用复选框# 设置图标(替换为实际路径)# 自定义数据(通过角色存储)item.setData(Qt.ItemDataRole.UserRole, f"备注:{text}")# 设置前景色(文字颜色)
2026-01-03 18:02:51
628
原创 PySide6之QListView 学习
通过自定义委托可以完全控制列表项的绘制和编辑,示例(自定义背景色和字体):import sysself.setWindowTitle("QListView 基础示例")# 1. 创建布局# 2. 创建 QListView# 3. 创建数据模型(QStringListModel 仅支持字符串)# 设置初始数据# 4. 将模型绑定到 QListView# 5. 可选:设置交互属性。
2026-01-03 16:47:51
804
原创 PySide6从0开始学习的笔记(二十一) 使用loadUi直接加载.ui文件
如果不使用pyuic将.ui文件(在designer中组态好的界面文件)转换成.py文件使用,可以使用loadUi的方法直接在代码中加载.ui文件。
2026-01-01 18:15:53
376
原创 PySide6从0开始学习的笔记(二十) qdarkstyle的深入应用
所有的操作均在下载到本地的QDarkStyleSheet-master项目下进行:项目地址:https://github.com/ColinDuquesnoy/QDarkStyleSheet/tree/master我放在了网盘:https://pan.baidu.com/share/init?surl=OP5e_ejyB5Brbao3VNSx7Q 提取码: 2jxrqdarkstyle的colorsystem.py中的所有颜色: qdarkstyle的配色系统只有灰色和蓝色两种色系共32
2025-12-30 21:55:42
953
原创 PySide6从0开始学习的笔记(十九) 界面显示主题的学习
模板库核心思路:不依赖封装库,直接使用现成的 QSS 模板(而非写代码的库),手动加载实现主题切换。官方模板资源和使用范例(Qt 官方示例)适用场景:需要完全定制界面风格(比如仿 Windows 11、macOS 风格),不想被库的样式限制。app.setStyleSheet(load_qss("dark.qss")) # 加载本地 QSS 文件核心特点:Linux 下的 Qt 样式引擎,支持海量自定义主题(可从下载),支持动态切换、透明度调节。适用场景。
2025-12-28 12:22:12
1090
原创 PySide6从0开始学习的笔记(十八) MVC(Model-View-Controller)模式的图形渲染体系
MVC 的核心是数据(Model)- 视图(View)- 控制器(Controller)QGraphicsItem(图元)= Model(模型):图元是显示的基本单元,它可以是一个圆、一个多边形、一条直线,或者是一个图片,它承载着图形的核心数据与状态(比如坐标、形状、颜色、是否可交互、像素数据等),是 “要渲染的内容本身”,不关心自己如何被显示、在哪显示。QGraphicsView(视图)= View(视图)
2025-12-26 09:38:12
1020
原创 PySide6从0开始学习的笔记(十七) 应用程序:QApplication
是 PySide6 应用的核心枢纽,负责事件循环、全局配置、资源管理等关键功能。掌握其常用方法(如exec()instance()setStyle())是开发 Qt 界面程序的基础,合理使用可保证应用的稳定性和跨平台兼容性。
2025-12-25 12:47:00
826
原创 PySide6从0开始学习的笔记(十六) 定时器QTimer
QTimer是 Qt 事件循环驱动的定时器,核心是timeout信号,支持单次 / 重复触发;主线程使用时可直接绑定 UI 操作,子线程使用需配合事件循环和信号槽;优先使用或静态方法singleShot实现延时任务;注意线程安全,UI 操作必须在主线程执行,高精度场景需选择合适的定时器类型。
2025-12-24 23:20:43
1035
原创 PySide6从0开始学习的笔记(十五) 线程管理
方式适用场景优点缺点继承 QThread简单、单一的耗时任务代码直观,易理解线程复用性差复杂、可复用的任务灵活,解耦,易管理代码稍多大量短期小任务高效,低资源开销不适合长期运行的任务主线程只处理 UI,子线程处理耗时操作;线程间通信仅通过信号与槽;安全停止线程,避免强制终止;共享数据加锁,防止数据竞争。
2025-12-24 21:33:21
1061
原创 PySide6从0开始学习的笔记(十四)创建一个简单的实用UI项目
<x>0</x><y>0</y></rect><size></size><size></size><string/></widget></item><size></size><size></size></widget></item></layout></widget><rect><x>0</x><y>0</y>
2025-12-22 21:59:26
1387
原创 PySide6从0开始学习的笔记(十二) QProgressBar(进度条)
支持确定 / 不确定进度模式自定义文本格式和样式结合多线程实现无阻塞进度更新可通过自定义绘制实现复杂分段效果实际开发中,需根据场景选择合适的进度更新方式(定时器 / 多线程),并通过 QSS 适配界面风格。
2025-12-20 07:00:00
469
原创 PySide6从0开始学习的笔记(十一) QSS 属性选择器
如果内置属性无法满足筛选需求,可通过给控件设置自定义属性btn = QPushButton("危险按钮")# 设置自定义属性:type=danger# 如果是动态修改属性,需刷新样式才能生效import sysbtn = QPushButton("危险按钮")# 设置自定义属性:type=danger、size=largebtn2 = QPushButton("启动按钮")""")enabledfocusobjectName等;控件专属属性(如 QPushButton 的default。
2025-12-19 18:20:44
1151
原创 PySide6从0开始学习的笔记(十) 样式表(QSS)
对于自定义控件(继承 QWidget),默认无法直接应用 QSS 背景等样式,需重写paintEvent或设置。示例:支持 QSS 的自定义控件import sys# 启用样式背景(关键)self.setAttribute(Qt.WA_StyledBackground, True) # 启用样式背景,必需的""")基础样式控制(颜色、字体、边框)状态与子控件的精细化样式运行时动态切换样式自定义控件的样式适配高级用法的关键在于掌握选择器优先级子控件定位状态伪选择器。
2025-12-19 07:00:00
1248
原创 PySide6从0开始学习的笔记(八) 控件(Widget)之QSlider(滑动条)
QSlider 是 PySide6 中灵活的数值调节控件,核心在于掌握数值范围 / 步长设置、信号绑定和样式定制。根据场景选择合适的信号(如实时响应选 sliderMoved,确认值选 sliderReleased),结合 QSS 可实现与界面风格统一的滑动条。
2025-12-18 13:34:16
666
原创 PySide6从0开始学习的笔记(九) 控件(Widget)之QComboBox(下拉选择框)
设置下拉框最多显示 3 个条目(超出显示滚动条)# 设置下拉框最小宽度。
2025-12-18 07:00:00
1069
原创 PySide6从0开始学习的笔记(七) 控件(Widget)之文字输入类控件
QPlainTextEdit 是 PySide6 中处理纯文本的核心控件,通过基础文本操作、光标控制、信号响应可满足大部分纯文本编辑需求,结合语法高亮、行号控件等扩展可实现代码编辑器、日志查看器等复杂功能。重点掌握其轻量级特性、行级操作和信号槽机制,即可灵活应用于各类文本处理场景。
2025-12-17 22:00:40
897
原创 PySide6从0开始学习的笔记(六) 控件(Widget)之按钮类
原生的单选按钮,选中标志图片和文字都很小,如果有需求,可以使用设置样式表,也就是setStyleSheet()的方法将其设置为自己的图片,同样的,它的字体也可以更改。PySide6 中的交互类控件是用户与应用程序进行双向沟通的核心组件,涵盖按钮、输入框、选择器、滑块等,这类控件支持用户操作(点击、输入、选择等)并能触发响应逻辑。:stateChanged(int)(状态变化时触发,0 = 未选,1 = 半选,2 = 选中)。:多选项选择(可多选),支持三态(选中 / 未选中 / 半选中,如子项部分选中)。
2025-12-17 18:14:25
450
原创 pyside6.QtCore.Slot 的简单研究
槽函数可以是 def(实例方法)、@staticmethod(静态方法),但不能是 @classmethod(类方法),且通常用 def 实例方法(可访问组件实例属性)。简单说,PySide6 的 @slot() 就是给方法 “打标签”,告诉 PySide6:“这个方法是用来响应信号的,请允许信号触发它”,是信号槽机制的核心语法。信号传递的参数类型、数量,必须和 @Slot() 声明的类型、数量完全一致,否则连接失败或运行时报错(推荐显式指定类型,而非省略)。中,@Slot() 是。
2025-12-16 21:30:28
940
原创 PySide6从0开始学习的笔记(五) 信号与槽
import sys# 自定义信号:必须定义为类属性,可以指定参数类型(str, int 等)custom_signal = Signal() # 定义一个不带类型参数的信号self.btn = QPushButton("发送自定义信号")self.label = QLabel("等待信号...")# 1. 连接按钮点击信号到发送自定义信号的发射函数# 2. 连接自定义信号到槽函数。
2025-12-16 15:28:36
1057
原创 PySide6 的 QSettings简单应用学习笔记
的类,会自动将应用的配置数据保存到系统对应位置(Windows 注册表、macOS/iOS 的 plist 文件、Linux 的配置文件),无需手动管理文件路径。QSettings 的核心价值是。如果后续修改了窗口布局(如新增 / 删除停靠窗口、工具栏),restoreState 可能会失败。(工具栏位置、停靠窗口位置 / 状态、菜单栏可见性等),返回 QByteArray 类型。(位置、大小、是否最大化 / 最小化),返回 QByteArray 类型。QSettings 是 PySide6 中用于。
2025-12-15 23:26:44
502
原创 PySide6从0开始学习的笔记(四)QMainWindow
固定布局结构标题栏(默认包含窗口控制按钮:最小化、最大化、关闭);中心部件(central widget):窗口的核心内容区域(必须通过设置,否则中心区域为空);可选组件:菜单栏(menu bar)、工具栏(tool bar)、状态栏(status bar)、停靠窗口(dock widget,可拖拽停靠的辅助窗口)。核心功能支持菜单 / 工具栏 / 状态栏的快速创建与管理(如menuBar()获取菜单栏、显示状态栏提示);
2025-12-15 22:55:18
1329
试试用pyqt做一个上位机软件,但愿不会烂尾(七)配套资源
2023-03-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
4