Класс QRectF определяет конечный прямоугольник на плоскости, используя точность с плавающей запятой.
В List of All Members for QRectF нет метода mousePressEvent()
.
Класс QGraphicsRectItem предоставляет прямоугольный элемент, который можно добавить в QGraphicsScene
.
List of All Members for QGraphicsRectItem + QGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
Прочитайте В чём разница между сценой и представлением в PyQt5?, я пытался что-то рассказать.
import sys
'''
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
'''
from PyQt5.Qt import *
class CustomItem(QGraphicsRectItem):
def __init__(self, parent = None, scene = None):
super(CustomItem, self).__init__()
self.setRect(200, 200, 120, 25)
def mousePressEvent(self, event):
self.setBrush(QBrush(Qt.cyan))
print(f'class CustomItem(QGraphicsRectItem): {event.pos()} # <--- QGraphicsRectItem ')
super(CustomItem, self).mousePressEvent(event)
class My_Rect(QRectF):
def __init__(self):
super().__init__(0, 0, 100, 100)
def mousePressEvent(self, event):
print(f'class My_Rect(QRectF): {event.pos()} # ??????????????? ')
super(My_Rect, self).mousePressEvent(event)
class GraphicsScene(QGraphicsScene):
def __init__(self):
super().__init__()
def mousePressEvent(self, event):
super(GraphicsScene, self).mousePressEvent(event)
sp = event.scenePos()
print(f'class GraphicsScene(QGraphicsScene): {sp} # <--- Scene ')
class My_Canvas(QGraphicsView):
def __init__(self):
super().__init__()
self.graphScene = GraphicsScene()
self.m = My_Rect()
self.graphScene.addRect(self.m)
self.setScene(self.graphScene)
def mousePressEvent(self, event):
super(My_Canvas, self).mousePressEvent(event)
print(f'class My_Canvas(QGraphicsView): {event.pos()}\n')
class Window(QWidget):
def __init__(self):
super().__init__()
self.canvas = My_Canvas()
layout = QVBoxLayout(self)
layout.addWidget(self.canvas)
self.item = CustomItem()
self.canvas.graphScene.addItem(self.item)
self.canvas.graphScene.update()
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec())

