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

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

相关推荐
苏三有春17 小时前
PyQt实战——使用python提取JSON数据(十)
python·json·pyqt
LL.。1 天前
目标检测——基于yolov8和pyqt的螺栓松动检测系统
yolo·目标检测·pyqt
算法小白(真小白)3 天前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
街 三 仔3 天前
【QSS样式表 - ⑨】:QGroupBox控件样式
pyside6·pyqt5·qtdesigner·qss
yaosheng_VALVE4 天前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
街 三 仔4 天前
【QSS样式表 - ⑤】:QLineEdit控件样式
pyside6·pyqt5·qtdesigner·qss
utmhikari4 天前
【Python随笔】如何用pyside6开发并部署简单的postman工具
python·postman·pyqt·pyside6·桌面工具
光谷中心城打工人6 天前
使用pyinstaller打包pyqt的程序,运行后提示ModuleNotFoundError: No module named ‘Ui_main‘
开发语言·python·pyqt
程序员尹志平7 天前
es分页查询最新
pyqt
ymchuangke10 天前
Pyside6 --Qt设计师--简单了解各个控件的作用之:Item Views
python·qt·ui·pyside6