PySide6 Tutorials (三)鼠标移动控件及其位置更新

问题描述

在graphicview中拖拽控件从A位置到B位置 ,但是从B位置再次拖拽 控件的时候,控件依旧从A位置出发,与鼠标不处于同一位置。

解决方案

网上搜了一圈都是收费文章,什么时候开源精神都已经被xxxx用来中间商赚差价了嘛!别人收费我免费,一起进步才不累!

python 复制代码
class RectItem(QtWidgets.QGraphicsRectItem):
    def __init__(self, *args):
        super().__init__(*args)
        self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable)

        self.drag_start_pos = None

    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            self.drag_start_pos = event.pos()  # 记录鼠标点击位置
        super().mousePressEvent(event)

    def mouseMoveEvent(self, event):
        if event.buttons() == QtCore.Qt.LeftButton:
            if self.drag_start_pos is not None:
                offset = event.pos() - self.drag_start_pos  # 计算鼠标拖动的偏移量
                new_pos = self.pos() + offset  # 计算新的控件位置
                self.setPos(new_pos)  # 更新控件位置
        super().mouseMoveEvent(event)

    def mouseReleaseEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            self.drag_start_pos = None
        super().mouseReleaseEvent(event)
知识点
  1. 控件位置的更新需要用到鼠标的位移
  2. 控件位置拖动之后,需要通过代码更新位置

本文为作者原创,转载需注明出处!!!

相关推荐
OICQQ676580083 天前
创建一个基于YOLOv8+PyQt界面的驾驶员疲劳驾驶检测系统 实现对驾驶员疲劳状态的打哈欠检测,头部下垂 疲劳眼睛检测识别
yolo·pyqt·疲劳驾驶·检测识别·驾驶员检测·打哈欠检测·眼睛疲劳
小灰灰搞电子12 天前
Qt PyQt与PySide技术-C++库的Python绑定
c++·qt·pyqt
越甲八千13 天前
pyqt 简单条码系统
数据库·microsoft·pyqt
重生之我在厦门做测试14 天前
基于pyqt开发串口和对应映射值(path)的显示工具
pyqt
hvinsion17 天前
【开源解析】基于Python+Qt打造智能应用时长统计工具 - 你的数字生活分析师
python·pyqt·开源软件·应用时长统计
毕设做完了吗?20 天前
基于YOLOv8+Deepface的人脸检测与识别系统
python·yolo·毕业设计·pyqt
懷淰メ24 天前
python3GUI--基于PyQt5+DeepSort+YOLOv8智能人员入侵检测系统(详细图文介绍)
开发语言·深度学习·yolo·目标检测·pyqt·课程设计·deepsort
Humbunklung1 个月前
PySide6 GUI 学习笔记——常用类及控件使用方法(多行文本控件QTextEdit)
笔记·python·学习·pyqt
En^_^Joy1 个月前
PyQt常用控件的使用:QFileDialog、QMessageBox、QTreeWidget、QRadioButton等
开发语言·python·pyqt
zhlei_123451 个月前
封闭内网安装配置VSCode Anconda3 并配置 PyQt5开发
ide·vscode·pyqt