PyQt5:用户可以在其中绘制的绘图表面[重复]

Posted

技术标签:

【中文标题】PyQt5:用户可以在其中绘制的绘图表面[重复]【英文标题】:PyQt5 : Drawing surface in which user can draw [duplicate] 【发布时间】:2020-06-11 14:54:26 【问题描述】:

我正在学习 PyQt5,我希望我的 GUI 有一种绘图表面,用户可以在其上绘制任何东西,因此应用程序可以将此绘图作为图像获取(目标是执行分类在那张图上)。

我该怎么做?我找到的只是Qpainter,它允许我在编写应用程序时进行绘制,但它不会让用户在使用应用程序时动态绘制。

【问题讨论】:

【参考方案1】:

QPainter 是用于绘图的表面。下面是一个绘制矩形标志的例子:

import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 200, 200)
        self.setWindowTitle('Drawing')
        self.show()

    def paintEvent(self, event):
        qp = QPainter()
        qp.begin(self)
        self.drawFlag(qp)
        qp.end()

    def drawFlag(self,qp):
        qp.setBrush(QColor(255, 0, 0))
        qp.drawRect(30, 30, 120, 30)
        qp.setBrush(QColor(0, 255, 0))
        qp.drawRect(30, 60, 120, 30)
        qp.setBrush(QColor(0, 0, 255))
        qp.drawRect(30, 90, 120, 30)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

如果你想画一条线,请使用:

qp.drawLine(x1, y1, x2, y2)

鼠标位置:

def mouseMoveEvent(self, event):
    print(event.x, event.y)

【讨论】:

以上是关于PyQt5:用户可以在其中绘制的绘图表面[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Jupyter Notebook - 在函数内绘图 - 未绘制图 [重复]

根据 julia 中的数据绘制 3d 表面(使用绘图)

我无法使用 MatplotLib 生成图表以在 PyQt5 App 上绘图

matplotlib 绘图问题

如何在表面视图上绘图?

Chromium网页绘图表面(Output Surface)创建过程分析