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. 控件位置拖动之后,需要通过代码更新位置

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

相关推荐
小灰灰搞电子2 天前
PyQt QWebChannel详解-C++与Web页面的无缝双向通信
前端·pyqt
小灰灰搞电子4 天前
PyQt QtAwesome详解:为Qt应用注入字体图标的魅力
pyqt·字体图标
DeepLearningYolo4 天前
基于PyQt的YOLOv5+DeepSORT可视化界面,可实现目标跟踪、模型更换、结果保存和轨迹隐藏等功能。
yolo·目标跟踪·pyqt
TRACER~859 天前
项目实战:pyqt6实现拼豆图纸生成器
python·pyqt
龙腾AI白云18 天前
大模型Prompt实战:精准生成专业技术文档
plotly·pyqt·fastapi·tornado·dash
带娃的IT创业者22 天前
音乐播放器开发:QtMultimedia 音频引擎与播放列表管理
音视频·pyside6·qtmultimedia·音乐播放·qmediaplayer·播放列表·audio ducking
CodebySandwich22 天前
QWidget转化为matplotlib绘图窗体
pyqt
懷淰メ22 天前
python3GUI---基于PyQt5+YOLOv8+DeepSort的智慧行车可视化系统(详细介绍)
开发语言·yolo·计算机视觉·pyqt·yolov8·deepsort·车距
:mnong22 天前
附图报价系统设计分析2
python·pyqt·openvino
@fai23 天前
PyQt6 Graphic进阶实战:打造一个视觉恒定的可缩放矩形框
python·pyqt