PyQt. Не обрабатывается событие mouseMoveEvent
Вот такой простой код:
import sys
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
class RectItem(QGraphicsRectItem):
def __init__(self, qrectf):
super().__init__()
self.qrectf = qrectf
self.setRect(self.qrectf)
def mouseMoveEvent(self, event):
print("hello")
class Window(QWidget):
def __init__(self):
super().__init__()
self.qrectf = QRectF(0, 0, 50, 50)
self.item = RectItem(self.qrectf)
self.scene = QGraphicsScene()
self.scene.setSceneRect(0,0,200,300)
self.scene.addItem(self.item)
self.canvas = QGraphicsView()
self.canvas.setScene(self.scene)
layout = QHBoxLayout(self)
layout.addWidget(self.canvas)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Window()
w.show()
app.exec()
Не могу понять, почему не срабатывает метод mouseMoveEvent(self, event)
Нашел примерно такой же вопрос здесь Но там ничего не понял.
Ответы (1 шт):
Я не знаю что вы будите делать дальше с этим простым кодом, но давайте для начала добавим один флаг.
Класс QGraphicsRectItem предоставляет прямоугольный элемент, который можно добавить в QGraphicsScene.
List of All Members for QGraphicsRectItem
QGraphicsItem::setFlag(QGraphicsItem::GraphicsItemFlag
flag, boolenabled= true)Если
enableравно true, флагflagэлемента включен; в противном случае он отключен.
Это перечисление описывает различные флаги, которые вы можете установить для элемента, чтобы переключать различные функции в поведении элемента.
class RectItem(QGraphicsRectItem):
def __init__(self, qrectf):
super().__init__()
self.qrectf = qrectf
self.setRect(self.qrectf)
self.setFlag(QGraphicsRectItem.ItemIsMovable, True) # !!! +++
def mouseMoveEvent(self, event):
print("hello")
class Window(QWidget):
def __init__(self):
super().__init__()
self.qrectf = QRectF(0, 0, 50, 50)
self.item = RectItem(self.qrectf)
self.scene = QGraphicsScene()
self.scene.setSceneRect(0,0,200,300)
self.scene.addItem(self.item)
self.canvas = QGraphicsView()
self.canvas.setScene(self.scene)
layout = QHBoxLayout(self)
layout.addWidget(self.canvas)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Window()
w.show()
app.exec()
