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

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

相关推荐
格数致用4 天前
1.7 PySide6 三栏工作台:QPainter 渲染、坐标契约与框选/涂抹交互
交互·pyside6
zhanghaha131411 天前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt
线上放牧人19 天前
Windows删除图标缓存
windows·python·pyqt
典典分享指南21 天前
用飞书 Wiki 搭内容作战室:从零搭建团队内容协作中枢
django·flask·numpy·pyqt
千里码aicood22 天前
pyqt-基于Qt的公共卫生间管理系统的设计与实现
pyqt
千里码aicood23 天前
pyqt基于pytorch的人脸交换系统设计(opencv)
人工智能·pyqt
楚莫识1 个月前
Qt show()、raise()、activateWindow() 调用顺序区别
qt·pyqt
小灰灰搞电子1 个月前
PyQt 实现蜂巢菜单源码分享
pyqt·鱼眼凸起
znnnk1 个月前
【Python】GUI 开发从入门到实战(三):PyQt/PySide 进阶之路
开发语言·python·pyqt
2601_962297481 个月前
开发图形界面Tkinter、wxPython、PyQt、PySide选哪一个
wxpython·tkinter·pyqt6·pyside6·gui开发