无法在 pyqt5 中嵌入的 matplotlib 上绘制线条

Posted

技术标签:

【中文标题】无法在 pyqt5 中嵌入的 matplotlib 上绘制线条【英文标题】:cannot plot lines on matplotlib embedded in pyqt5 【发布时间】:2018-02-22 07:11:46 【问题描述】:

以下是代码。它通过按下按钮绘制一条线。但是,当我按下按钮时,它只是打印出来

matplotlib.lines.Line2D 对象在 0x11371fcc0 ......

但无法在画布上显示线条。你是怎么解决的?

import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5 import QtCore
from PyQt5.QtWidgets import *

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

import mywidgets
# mywidgets.MplCanvas is a wrapper of FigureCanvas in order to make the drawing convenient.

class ApplicationWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.setWindowTitle("Hello")

        self.main_widget = QWidget(self)

        l = QVBoxLayout(self.main_widget)
        fig1 = Figure(figsize=(5, 4))
        self.sc = mywidgets.MplCanvas(self.main_widget, fig1)
        l.addWidget(self.sc)
        bdraw = QPushButton('Draw')
        bdraw.pressed.connect(self.draw)
        l.addWidget(bdraw)

        self.main_widget.setFocus()
        self.setCentralWidget(self.main_widget)

    def draw(self):
        # it does not report any error, but on lines are drawn.
        line = self.sc.axes.plot([1,2,3], 'r')
        print(line)


if __name__ == '__main__':
    app = QApplication([])

    aw = ApplicationWindow()
    aw.show()
    #sys.exit(qApp.exec_())
    app.exec_()

【问题讨论】:

您没有提供mywidget 的内容,因此我们无法运行您的代码。请提供Minimal, Complete, and Verifiable example 无论如何,我猜你需要在绘图指令后添加draw()draw_idle() 【参考方案1】:

您在绘制到画布后忘记更新它。

def draw(self):
    line = self.sc.axes.plot([1,2,3], 'r')
    self.sc.draw_idle()

【讨论】:

以上是关于无法在 pyqt5 中嵌入的 matplotlib 上绘制线条的主要内容,如果未能解决你的问题,请参考以下文章

在 PyQt5 中嵌入 Matplotlib 图形

当我在 PyQt5 窗口中嵌入 Matplotlib 图形时,为啥有两个重复的轴标签?

为啥我不能在 pyqt5 gui 中嵌入的 matplotlib 颜色图中成功绘制感兴趣区域?

在 PyQt5 中嵌入 Matplotlib:工具栏不起作用

Matplotlib 将图形嵌入到 UI PyQt5

PyQt5嵌入matplotlib-plot,改变x-ticks等属性[重复]