无法在 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 gui 中嵌入的 matplotlib 颜色图中成功绘制感兴趣区域?