GraphicsView的MousePressEvent不起作用

问题描述 投票:0回答:1

我必须进行喷涂的应用程序。我想在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_())
python pyqt paint qgraphicsview
1个回答
0
投票

不再重要。我已经解决了。

© www.soinside.com 2019 - 2024. All rights reserved.