- 博客(276)
- 资源 (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
1206
原创 python的海象运算符 :=
海象运算符(Walrus Operator)是 Python 3.8 版本引入的一个新特性,其符号为:=。海象运算符”这个名字源于其外观,:=这一符号组合看起来和海象的眼睛与长牙有几分相似。它的主要作用是在表达式内部进行赋值操作,这样可以减少代码的重复,使代码更加简洁和高效。
2025-03-28 23:07:01
269
原创 pyside6的QGraphicsView体系,当鼠标位于不同的物体,显示不同的右键菜单
【代码】pyside6的QGraphicsView体系,当鼠标位于不同的物体,显示不同的右键菜单。
2025-03-24 22:42:50
277
原创 PySide(PyQt),QGraphicsView 类的橡皮筋选择框的 rubberBandChanged 信号与拖动模式QGraphicsView.DragMode
当用户开始拖动鼠标创建橡皮筋选择框、拖动过程中橡皮筋选择框的大小和位置发生变化,或者释放鼠标结束橡皮筋选择框的创建时,从运行结果看得出,当松开鼠标时,发送了一个全0信号,用以复位矩形区域,可以将其作为选择结束的标志,来进行下一步的操作。信号在橡皮筋选择框的状态发生变化时被发射。橡皮筋选择框是用户通过鼠标拖动在视图中创建的一个矩形框,常用于选择。函数用于设定视图的拖动模式,此模式决定了用户在视图里进行鼠标拖动操作时的行为表现。在 PySide6 中,在 PySide6 里,,这个参数定义了不同的拖动模式。
2025-03-21 22:49:03
301
原创 python的MRO学习笔记
在Python中,MRO(Method Resolution Order)即方法解析顺序,它定义了在多重继承的情况下,Python 解释器查找方法和属性的顺序。
2025-03-21 09:23:48
464
原创 用于AI-CV项目标注的星标模型
功能:生成星标图形项,并在目标点上将底图颜色反色显示,当定位和拖动后输出底图在标记点的像素值。输入和输出使用信号槽机制。
2025-03-17 18:07:27
733
原创 PySide(PyQt),QGraphicsItem的坐标映射转换函数
类提供了多个映射函数,用于在不同坐标系(例如:项目坐标系、父坐标系和场景坐标系)之间转换坐标和矩形。这些函数非常有用,尤其是在处理复杂的图形场景和需要精确位置信息的情况下。这些函数对于处理和转换不同图形元素之间的相对位置和尺寸非常有用。通过使用这些函数,你可以确保所有项目在同一个参考框架下正确渲染和计算,这对于构建复杂界面或进行精细化的图形操作非常重要。在PySide6中,
2025-03-17 12:04:14
325
原创 python的@typing.overload学习笔记
typing.overload 是 Python 标准库 typing 模块中的一个装饰器,用于定义函数的多个重载版本。它的主要作用是提供更详细的类型信息,帮助开发者理解函数在不同情况下的预期输入和输出类型,同时也能增强静态类型检查工具(如 mypy)的能力,以检测潜在的类型错误。@typing.overload 是 Python 中类型提示(type hinting)的一部分,用于指示函数或方法的不同重载版本。通常,@typing.overload 与实际的函数实现结合使用。
2025-03-14 11:28:34
253
原创 PySide(PyQt),使用types.MethodType动态定义事件
以PySide(PyQt)的图片项为例,比如一个视窗的场景底图是一个QGraphicsPixmapItem的,需要修改它的鼠标滚轮事件,以实现鼠标滚轮缩放显示的功能。为了达到这个目的,可以重新定义一个QGraphicsPixmapItem类,并重写它的wheelEvent()函数:然后再代码中实例化这个类就可以了,这没有任何问题。 首先,场景中只有这一个场景底图,而且我只需要修改它的鼠标滚轮事件响应这一个函数,为了这简单的一个需求重建一个新的类,不是那么优雅。然后,鼠标滚轮缩放显示的这个
2025-03-13 16:45:23
949
原创 Python的types库学习记录
types 库提供了一些有用的工具和常量,帮助开发者在运行时处理和操作不同类型的对象。通过使用这些工具,开发者可以实现动态类型检查、动态方法绑定和动态模块创建等功能。
2025-03-13 15:19:06
298
原创 PySide(PyQt),QGraphicsItem的父子图像项的一个练习demo
在 PySide( PyQt)中,是用于在中创建可绘制对象的基类。支持父子关系,这种父子关系允许将多个图形项组合在一起,形成一个层次结构。当父项在场景中添加、移除以及移动、旋转或缩放时,子项会相应地跟随父项进行操作和变换。
2025-03-12 16:08:13
385
原创 PySide(PyQT),QGraphicsItem的pos()和scenePos()区别
特性pos()scenePos()坐标系父项坐标系(局部坐标)场景坐标系(全局坐标)顶层项如果没有父项,pos() 和 scenePos() 的值相同总是返回场景中的绝对位置有父项返回相对于父项的位置返回场景中的绝对位置用途操作局部位置获取全局位置• pos()表示图形项在其父项坐标系中的位置。• scenePos()表示图形项在场景坐标系中的绝对位置。• 根据需求选择合适的坐标系和方法,可以更灵活地操作和管理图形项的位置。
2025-03-11 23:18:59
898
原创 PySide(PyQT),QGraphicsRectItem的setPos()和setRect()的坐标位置的区别
上述代码的含义是创建一个QGraphicsRectItem实例,并且等同于执行了setRect(0, 0, 120, 60),由于没有设置它的pos(),所以它在场景中的位置是(0, 0)。之后,用鼠标就可以将图形项QGraphicsRectItem在场景中拖动,拖动之后改变的是图形项的pos()参数,即他在父项坐标系的位置,本例中即为场景的坐标系。即setRect()设定的参数,参照系仍然是相对于图形项原点的位置。
2025-03-11 22:46:27
422
原创 PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的区别
简单来说,它主要处理鼠标拖动操作。QMouseEvent 提供了丰富的信息和方法,例如可以使用 buttons() 方法来检查哪些鼠标按钮被按下,使用 pos() 方法获取鼠标相对于图形项的位置,使用 scenePos() 方法获取鼠标在场景中的位置等。当鼠标在对应的图形项上移动,且没有任何鼠标按钮被按下时,hoverMoveEvent 会被触发,也就是单纯的鼠标悬停移动。需要注意的是,要使图形项能够接收悬停事件,必须调用 setAcceptHoverEvents(True) 方法来启用悬停事件的接收。
2025-03-11 11:25:22
476
原创 PySide(PyQT)的contains() 方法
在 PySide中,contains()方法主要用于判断点、矩形或其他区域是否包含在某个特定的矩形或区域内。
2025-03-09 17:04:22
224
原创 python,isinstance() 和type()的区别
当需要判断一个对象是否具有某种特定的行为或属性,而不关心它具体是哪个类的实例,只要它是某个类或其子类的实例就满足条件时,通常使用。比如在多态的场景中,不同的子类可能都实现了某个特定的方法,只需要判断对象是否是能够调用这个方法的类的实例即可。:当需要严格判断对象的类型,不希望考虑继承关系,只关心对象是不是某个特定类的实例,而不是其子类的实例时,使用。返回的是对象的直接类型,不会考虑继承关系,即便是子类的实例,它也只返回子类本身的类型,而不会返回父类的类型。函数主要用于返回对象的类型。
2025-03-09 11:48:36
330
原创 PySide(PyQT)的视图(QGraphicsView)范例(三) 后端代码
前面的系统规划已经明确了本项目使用右键菜单和信号槽来实现,所以每个功能组件都要有右键弹出功能,而且不同的组件和工作状态可能需要不同的右键菜单;另外每个代码板块要有信号出入接口,板块之间通过信号传递信息,在板块内通过槽函数实现功能。
2025-03-07 18:17:28
620
原创 PySide6的QFileDialog.getOpenFileName()打开特别慢的原因
在默认情况下,也就是上述的代码,QFileDialog.getOpenFileName 会使用操作系统提供的原生文件选择对话框。发现选择了文件之后,需要经过很长时间才能显示图片,有时甚至到10秒之久。解决方法:不使用系统原生对话框(options=QFileDialog.DontUseNativeDialog),而是使用QT自带的文件对话框。
2025-03-07 16:21:46
218
原创 PySide(PyQT)的视图(QGraphicsView)范例(二) 功能规划
• 当点击了“保存规则”或“退出编辑”,退出编辑模式,进入空闲模式,鼠标变回箭头光标。当点击了“保存规则”,将规则的内容:框的位置(绿色边框)、规则的正则公式、取样点的位置保存到JSON或者数据库文件。• 当点击了“新建规则”,进入编辑模式,鼠标变为十字光标,按住鼠标左键画红色的框,确定或更新取样范围;在规则方框范围内单击鼠标,增加取样点,并在取样点上显示取样图标。• 当点击了“编辑当前规则”,又进入编辑模式,与前述的点击了“新建规则”进入的编辑模式相同。根据以上需求,设计信号和槽以及右键事件。
2025-03-05 21:38:03
311
原创 PySide(PyQT),怎样在非QObject对象上应用信号槽框架
在 PySide(以及 PyQt)中,信号和槽机制是基于QObject 类实现的。只有继承自 QObject 的类才能够定义和使用信号与槽。那么如果画面中的对象不是QObject 类,就无法使用信号和槽。QGraphicsRectItem.__init__(self, *args) 和 QObject.__init__(self),显式地调用了父辈的构造函数并指定入参分配。
2025-03-05 01:01:27
326
原创 PySide(PyQT)的@Slot()、@pyqtSlot()装饰器的作用
使用@Slot()装饰器:推荐在需要严格类型检查、跨线程调用或追求更好性能的场景中使用。它可以提供更明确的类型信息和更好的线程安全性。不使用@Slot()装饰器:适用于简单的场景,当你不需要严格的类型检查,并且不涉及跨线程调用时,可以简化代码。
2025-03-05 00:00:51
443
原创 PySide(PyQT)的信号槽框架的一个demo练习
在这个代码中,重新定义了窗口类的鼠标按下的事件,当鼠标按下时,窗口实体的信号发射,窗口实体的信号连接了一个其自身的内部槽函数和一个项目级的槽函数,在项目级的槽函数中,功能函数实体的信号将接收到的窗口实体的信号发射并由其自身的内部槽函数接收。这样就实现了不同的组件之间的信号传递,而且每个组件的代码中不会出现不属于其自身的任何元素,为程序的模块化和前后端分离打下基础。当调用 signal.emit(*args) 时,PySide 会通知所有连接到该信号的槽函数,并将参数传递给这些槽函数。
2025-03-03 17:36:02
567
原创 PySide(PyQT)的视图(QGraphicsView)范例(一) 基本框架
这是因为 fitInView 方法的行为依赖于视图的实际大小,而在窗口尚未显示时,视图的大小可能是未确定的或者是默认值,从而导致 fitInView 无法正确计算和应用缩放,而show()函数执行之后就确定了视图的大小。这两行代码的顺序一定不能反,如果将 widget.show() 放在widget.view.set_image(pixmap)后面,将会是下面的显示效果,初始化后不能全幅显示。
2025-03-03 16:15:53
635
原创 python的@staticmethod与@classmethod的共同点与区别
在 Python 中,@staticmethod和@classmethod都是用于定义类方法的装饰器,但它们的用途和行为有所不同。无论是`@staticmethod还是`@classmethod,它们定义的方法都属于类本身,而不是类的实例。这意味着这些方法可以通过类直接调用,而不需要创建类的实例。@staticmethod和@classmethod`定义的方法都可以被子类继承。子类可以直接调用这些方法,或者覆盖它们以实现不同的行为。虽然这些方法主要与类相关,但它们也可以通过类的实例调用。
2025-03-02 17:03:01
416
原创 PyQT(PySide)的上下文菜单策略设置setContextMenuPolicy()
在 Qt 中,QWidget类提供了几种不同的上下文菜单策略,这些策略通过枚举类型来定义,用于控制控件(如按钮、文本框等)在用户右键点击时如何显示上下文菜单。以下是。
2025-02-28 20:36:53
628
原创 PySide(PyQT)重新定义contextMenuEvent()实现鼠标右键弹出菜单
通过重新定义contextMenuEvent()来实现鼠标右键菜单。上述代码,只有在按钮上有鼠标右键菜单。
2025-02-27 17:31:34
407
原创 文字识别软件cnocr学习笔记
在初始化 CnOcr 对象时指定 vocab 参数。这样,模型只会识别 vocab 中包含的字符。# 自定义字符集,只识别数字和字母print(f"文本: {line['text']}, 置信度: {line['score']}")•。
2025-02-20 18:13:37
1137
原创 YOLOV8的学习记录(四) 将SAM分割得到的结果保存为 YOLOv8 实例分割训练所需的格式
YOLOv8 的实例分割模型使用多边形来表示对象的轮廓。将 SAM 生成的掩模图转换为 YOLO 格式的标签文件。创建一个 YOLOv8 的配置文件,指定数据集路径、类别数等参数。使用 YOLOv8 提供的默认配置文件并进行修改。通过以上步骤,就可以利用 SAM 生成的图像和掩模图,从头训练一个 YOLOv8 的实例分割模型。使用 YOLOv8 的命令行工具或 Python API 开始训练模型。训练完成后,可以使用验证集评估模型性能,并在测试集上进行推理。使用训练好的模型进行实例分割。
2025-02-16 11:15:27
446
原创 YOLOV8的学习记录(三) 训练各种模型所使用的数据格式区别
例如,对于一个人体姿态估计任务,假设每个人体有 17 个关键点,标签文件可能的格式为:class x1 y1 v1 x2 y2 v2... x17 y17 v17,其中 class 是类别索引,xi 和 yi 是第 i 个关键点的归一化坐标,vi 是该关键点的可见性(通常 0 表示不可见,1 表示可见)。实例分割的标签除了类别信息外,还需要包含目标的轮廓信息。综上所述,虽然图片类型在不同任务中基本通用,但标签格式根据任务的不同有明显的差异,在准备数据时需要根据具体的任务需求进行相应的处理和标注。
2025-02-15 22:52:06
663
原创 YOLOV8的学习记录(二) yolo8的几个内置模型简介
YOLOv8 是一个多功能的计算机视觉框架,支持多种任务,包括分类(Classify)、检测(Detect)、旋转目标检测(OBB)、姿态估计(Pose)、实例分割(Segment)。图像分类任务是将整张图像归类到预定义的类别中。类别标签和置信度分数。适用于场景识别、物体类别判断等任务。probs:一个形状为 (num_classes,) 的张量,包含了输入图像属于每个类别的概率。names:一个字典,将类别索引映射到类别名称。
2025-02-15 21:17:55
811
原创 YOLOV8的学习记录(一) 环境配置和安装
获得模型权重文件:yolov8n.pt。这只是其中的一个模型权重,你也可以从ultralytics官网或者别的途径获取到别的模型。yolo8是之前创建的环境名,yolov8n.pt是下载得到的模型权重,cat.jpg是用来预测的图片名。运行之后,在项目下面的目录:runs/detect/predict可以看到预测结果。在pycharm中新建项目,并将解释器设为之前创建的conda环境。将两个文件复制到同一个目录下。
2025-02-14 16:48:32
401
原创 PySide (PyQt)的视图(QGraphicsView)和场景(QGraphicsScene)
在 PySide 或 PyQt 中,QGraphicsView 和 QGraphicsScene 是两个重要的类,它们一起构成了一个强大的框架,用于显示和操作二维图形项(如图像、线条、矩形、文本等)。
2025-02-12 17:32:23
1378
原创 基于深度学习的视觉检测小项目(十八) 图像标注功能的初步规划
,你可以上传自己的图片,并使用SAM的三种分割方式进行体验:多点提示、目标框选以及全自动分割。对于我的这个项目的图像特征,在网站上实践后,多点提示的分割方法识别率非常高,并且采用点输入的方式标注效率比框选方式更高,所以采用这种方法作为项目的分割方法。作为一个视觉深度学习项目,必不可少的功能是样本图像的特征标注。经过实践和比较,SAM在几种常见的标注工具中,标注的准确率和效率方面都很优秀,并且安装使用最方便,所以本项目采用了SAM作为标注的基础工具。shifft+鼠标右键的功能是删除所有的提示点;
2025-02-07 00:43:50
523
试试用pyqt做一个上位机软件,但愿不会烂尾(七)配套资源
2023-03-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人