Постепенное движение фигуры в ту точку холста, где пользователь кликает левой кнопкой мыши
Необходимо запрограммировать постепенное движение фигуры в точку холста, где пользователь кликает левой кнопкой мыши.
Координаты события хранятся в его атрибутах x и y (event.x , event.y).
main.py:
import sys
from PySide2.QtWidgets import QWidget, QApplication
from PySide2.QtCore import QPropertyAnimation, QPoint
class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(500, 500)
self.child = QWidget(self)
self.child.setStyleSheet("background-color:green;border-radius:25%;")
self.child.resize(50, 50)
self.anim = QPropertyAnimation(self.child, b"pos")
self.anim.setDuration(1500)
self.anim.start()
def mouseMoveEvent(self, event):
self.anim.setEndValue(QPoint(event.x(), event.y()))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
Проблема в том, что событие выполняется всего единожды, при первом нажатии в указанную точку.
Если затем попробовать кликнуть в другое место холста, то фигура не будет двигаться.
Как можно решить данную проблему?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import sys
'''
from PySide2.QtWidgets import QWidget, QApplication
from PySide2.QtCore import QPropertyAnimation, QPoint
'''
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.resize(500, 500)
self.child = QWidget(self)
self.child.setStyleSheet("background-color: green; border-radius: 25%;")
self.child.resize(50, 50)
self.anim = QPropertyAnimation(self.child, b"pos")
self.anim.setDuration(1500)
#--- self.anim.start()
# ??? def mouseMoveEvent(self, event):
def mousePressEvent(self, event): # +++
# ------------------------------------------> vvv <-------> vvv <------------
self.anim.setEndValue(QPoint(event.x()-25, event.y()-25))
self.anim.start() # +++
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

