我必须进行喷涂的应用程序。我想在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_())
不再重要。我已经解决了。