Я должен сделать заявку, которая рисует с помощью спрея. Я хочу собрать первую точку в 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_())