在应用程序窗口中,应根据在桌面上选择东西时如何形成矩形的原理,用鼠标绘制一个矩形。
问题是矩形被绘制在错误的位置。
我还想在移动鼠标光标时更改矩形的大小,而不是mouseMoveEvent
在每个事件上删除并创建一个矩形。
编码:
import sys
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QGraphicsScene, QGraphicsView, QApplication
class CustomGraphicsView(QGraphicsView):
def __init__(self, scene):
super().__init__(scene)
self.x = 0
self.y = 0
self.rect = None
def mousePressEvent(self, QMouseEvent):
self.x = QMouseEvent.pos().x()
self.y = QMouseEvent.pos().y()
def mouseMoveEvent(self, QMouseEvent):
new_x = QMouseEvent.pos().x()
new_y = QMouseEvent.pos().y()
if self.rect != None:
self.scene().removeItem(self.rect)
self.rect = self.scene().addRect(self.x, self.y, new_x - self.x, new_y - self.y)
def mouseReleaseEvent(self, QMouseEvent):
self.scene().removeItem(self.rect)
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.init_UI()
def init_UI(self):
vbox = QVBoxLayout()
self.setLayout(vbox)
self.graphics_scene = QGraphicsScene(self)
graphics_view = CustomGraphicsView(self.graphics_scene)
vbox.addWidget(graphics_view)
if __name__ == '__main__':
application = QApplication(sys.argv)
main_window = MainWindow()
main_window.setGeometry(100,100,600,600)
main_window.show()
sys.exit(application.exec_())
作为一种选择:
单击鼠标按钮时突出显示+释放时消失:
截屏: