如何解决如何将可以绘制的像素图图层添加到QGraphicsView?
我正在尝试构建一个用于创建类似于绘画足球比赛的图形的应用程序。我已经能够在场上(QGraphicsView)毫无问题地为玩家符号添加像素图,但是现在我想在屏幕上添加像素图层,您可以使用QPainter绘制宽的接收器运行路线。我已经能够在QGraphicsView上显示标签,并在单击绘制按钮后显示要绘制的像素图,但是问题是,一旦将标签添加到QGraphicsView上,我将无法再选择播放器符号并移动即使未选择“绘制”按钮,它们也会围绕它们。我试图更改QLabel的Z值以将其放置在玩家符号的后面,但没有成功。我也尝试过将像素图放置在不带标签的QGraphicsView上(因为我知道您可以更改QGraphicsPixmapItem的Z值),但是当我这样做时,绘画者将不会注册mousemoveevent以便进行绘图。代码如下所示。请帮忙。警告:如果代码看起来很愚蠢,请原谅我,因为我仍然是初学者。谢谢。
class Ui_ChopBlock(object):
def setupUi(self,ChopBlock):
...
self.canvasView = QGraphicsView(self.centralwidget)
self.canvasScene = QGraphicsScene(self.canvasView)
self.canvasScene.setSceneRect(0,810,875)
self.canvasView.setScene(self.canvasScene)
self.canvasView.setStyleSheet("background-color: rgb(255,255,255);")
self.canvasView.setObjectName("canvasView")
self.canvasView.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.canvasView.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.canvasView.setMouseTracking(True)
...
class Window(QtWidgets.QMainWindow):
def __init__(self):
super(Window,self).__init__()
self.ui = Ui_ChopBlock()
self.ui.setupUi(self)
QtWidgets.qApp.installEventFilter(self)
self.ui.actionUploadBackground.triggered.connect(self.get_background)
self.ui.actionSave.triggered.connect(self.save_image)
self.ui.saveButton.clicked.connect(self.save_image)
self.ui.drawButton.clicked.connect(self.draw_something)
self.drawing = False
self.brushSize = 2
self.brushColor = Qt.black
self.lastPoint = QPoint()
self.label = QtWidgets.QLabel(self.ui.canvasView)
self.canvas = QtGui.QPixmap(810,875)
self.canvas.fill(Qt.transparent)
self.label.setPixmap(self.canvas)
self.label.setAttribute(Qt.WA_TranslucentBackground)
self.selectDraw = False
def draw_something(self):
if self.selectDraw == True:
self.selectDraw = False
else:
self.selectDraw = True
def mousePressEvent(self,event):
if (event.button() == Qt.LeftButton) and (self.selectDraw == True):
self.drawing = True
self.lastPoint = event.pos()-self.ui.canvascoords
def mouseMoveEvent(self,event):
if (event.buttons() & Qt.LeftButton) & self.drawing:
painter = QPainter(self.label.pixmap())
painter.setPen(QPen(self.brushColor,self.brushSize,Qt.SolidLine,Qt.RoundCap,Qt.RoundJoin))
painter.drawLine(self.lastPoint,(event.pos()-self.ui.canvascoords))
self.lastPoint = event.pos()-self.ui.canvascoords
self.update()
def mouseReleaseEvent(self,event):
if event.button() == Qt.LeftButton:
self.drawing = False
...
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = Window()
MainWindow.show()
sys.exit(app.exec_())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。