不能在pyqt5中嵌入的matplotlib上绘制线条

时间:2018-02-22 07:11:46

标签: matplotlib pyqt5

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

  

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_()

1 个答案:

答案 0 :(得分:1)

您在绘图后忘记更新画布。

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