MousePressEvent for GraphicsView не работает - PullRequest
0 голосов
/ 04 октября 2019

Я должен сделать заявку, которая рисует с помощью спрея. Я хочу собрать первую точку в viewMouseDown, затем я хочу собрать все точки в viewMouseMove и нарисовать их все в viewMouseUp. Проблема в том, что событие MousePressEvent не работает. Если я позволю ему рисовать одну точку (если я удаляю последний комментарий в viewMouseDown), это работает, но если я хочу сохранить все координаты, при перемещении мыши, в viewMouseMove и если я хочу нарисовать их все в viewMouseUp, этоне работает

Вот мой код класса CSpray:

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QPen

class CSpray:
    def __init__(self):
        self._xlist = []
        self._ylist = []
    def add(self, x, y):
        self._xlist.append(x)
        self._ylist.append(y)
    def draw(self, scene):
        pen = QPen(Qt.red)
        brush = QBrush(Qt.red)
        punten = []
        for x in range(len(self._xlist)):
            item = QtWidgets.QGraphicsEllipseItem(self._xlist[x], self._ylist[x], 10, 10)
            item.setPen(pen)
            item.setBrush(brush)
            punten.append(item)
        for y in punten:
            scene.addItem(y)

Вот код основного интерфейса:

# -*- coding: utf-8 -*-
"""
Created on Wed Oct  2 20:50:36 2019

@author: szewa
"""

import sys
from PyQt5 import QtWidgets, uic, QtCore
from spray import CSpray

Ui_MainWindow, QtBaseClass = uic.loadUiType("practicum 4.ui")

class MyApp(QtWidgets.QMainWindow):
    def __init__(self):
        super(MyApp, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self._scene = QtWidgets.QGraphicsScene()
        self.ui.tekenvel.setScene(self._scene)
        self._scene.setSceneRect(0,0,400,400)
        self.ui.tekenvel.mousePressEvent = self.viewMouseDown
        self.ui.tekenvel.mouseMoveEvent = self.viewMouseMove
        self.ui.tekenvel.mouseRelease = self.viewMouseUp
        self.ui.tekenvel.setMouseTracking(True)
    def viewMouseDown(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            self._spray = CSpray()
            point = self.ui.tekenvel.mapToScene(event.pos())
            x = point.x()
            y = point.y()
            self._spray.add(x, y)
            #self._spray.draw(self._scene)
    def viewMouseMove(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            #self._spray = CSpray()
            point = self.ui.tekenvel.mapToScene(event.pos())
            x = point.x()
            y = point.y()
            self._spray.add(x, y)
            #self._spray.draw(self._scene)
    def viewMouseUp(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            self._spray.draw(self._scene)
        #self._spray._xlist.clear()
        #self._spray._ylist.clear()

if __name__ == "__main__":
    app = 0
    app = QtWidgets.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())
...