Как установить положение миниатюры для QDrag в QFrame? - PullRequest
0 голосов
/ 18 октября 2018

В моем QFrame объекте я пытаюсь добиться эффекта, когда при нажатии мыши и перемещении мыши миниатюра следует за положением курсора.Мне удалось этого добиться.Тем не менее, миниатюра имеет своего рода анимацию, где она «влетит» из 0,0 объекта QFrame в направлении положения курсора и обратно в 0,0 при отпускании мыши.

Это выглядит примерно так:

enter image description here

import sys
from PyQt5.QtWidgets import QApplication, QFrame
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag, QPixmap

class Example(QFrame):

    def __init__(self):
        super().__init__()
        self.resize(500, 500)

    def mouseMoveEvent(self, e):
        mimeData = QMimeData()
        drag = QDrag(self)
        thumbnail = QPixmap('test.png').scaled(100, 100, Qt.KeepAspectRatio)
        drag.setPixmap(thumbnail)
        drag.setMimeData(mimeData)
        drag.setHotSpot(e.pos())
        drag.exec_(Qt.MoveAction)

if __name__ == '__main__':    
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()

Что нужно добавить / изменить так, чтобы миниатюра появлялась прямо в позициикурсор вместо «летать» и «летать»?

1 Ответ

0 голосов
/ 18 октября 2018

Попробуйте:

import sys
from PyQt5.QtWidgets import QApplication, QFrame, QLabel
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag, QPixmap

class Example(QFrame): 
    def __init__(self):
        super().__init__()
        self.resize(500, 500)
        self.label = QLabel(self)     # +++
        self.label.resize(100, 100)
        self.setAcceptDrops(True)     # +++

    def mouseMoveEvent(self, e):
        mimeData = QMimeData()
        drag     = QDrag(self)
        self.thumbnail = QPixmap('E:/_Qt/img/qt-logo.png').scaled(100, 100, Qt.KeepAspectRatio)
        drag.setPixmap(self.thumbnail)
        drag.setMimeData(mimeData)
#        drag.setHotSpot(e.pos())  
        drag.exec_(Qt.MoveAction) 

    def dropEvent(self, e):           # +++
        self.label.setPixmap(self.thumbnail)
        self.label.move(e.pos())

    def dragEnterEvent(self, e):      # +++
        if e.mimeData():
            e.acceptProposedAction()

if __name__ == '__main__':    
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...