PyQt. Не обрабатывается событие mouseMoveEvent

Рейтинг: 2Ответов: 1Опубликовано: 19.02.2023

Вот такой простой код:

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)

Нашел примерно такой же вопрос здесь Но там ничего не понял.

Ответы

▲ 2Принят

Я не знаю что вы будите делать дальше с этим простым кодом, но давайте для начала добавим один флаг.

Класс QGraphicsRectItem предоставляет прямоугольный элемент, который можно добавить в QGraphicsScene.

List of All Members for QGraphicsRectItem

QGraphicsItem::setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = 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()  

введите сюда описание изображения