QtDesigner生成的PyQt5界面嵌入Matplotlib控件无图表显示问题排查
解决PyQt5中Matplotlib图表无法显示的问题
Hey there! Let's figure out why your Matplotlib chart isn't showing up in your PyQt5 greenhouse data app. Looking at your code, there are a couple of key issues that are keeping your plot from rendering—let's break them down and fix them.
问题分析
- 绘图方法未被调用: 你在
DesignerMainWindow类中定义了mplwidget()方法,但代码里从来没有执行过这个方法,所以绘图逻辑根本没跑起来。 - Matplotlib轴对象访问错误: 在
mplwidget()里你直接用self.ax,但这个属性并不属于DesignerMainWindow实例。实际上,轴对象是你在UI中添加的MplWidget的一部分,需要通过self.mpl.canvas.ax来访问。 - 错误的绘制方法: 你调用了
self.ax.draw(),但Matplotlib的轴对象并没有draw()方法,应该调用画布(canvas)的draw()方法来触发渲染。
修改后的代码
更新后的gui.py
import sys import numpy as np from PyQt5 import QtWidgets from Tab_Widget_Main_scailing_01 import Ui_MainWindow # 确保导入自定义的MplWidget from matplotlib import MplWidget # 如果文件路径不同,请调整导入路径 class DesignerMainWindow(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self, parent = None): super(DesignerMainWindow, self).__init__(parent) self.setupUi(self) # 窗口初始化时调用绘图方法 self.mplwidget() def mplwidget(self): # 添加示例数据,避免空图表(原代码用了空数组,即使正常运行也看不到内容) timestamp = np.array([1, 2, 3, 4, 5]) temp_up = np.array([22, 24, 23, 25, 24]) # 正确访问MplWidget中的轴对象 self.mpl.canvas.ax.plot(timestamp, temp_up) # 触发画布绘制图表 self.mpl.canvas.draw() if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) # 修正了sys.argv的语法错误 gui = DesignerMainWindow() gui.show() sys.exit(app.exec_())
额外注意事项
- 导入MplWidget: 确保
gui.py能正确从你的matplotlib.py文件导入MplWidget(上面的代码已经添加了导入语句,根据你的文件结构调整路径)。 - 测试数据: 原代码使用了空数组
np.array([]),即使所有逻辑正确,也会显示空图表。添加示例数据后可以直观看到绘图效果。 - QApplication初始化: 原代码中
QtWidgets.QApplication([sys.argv])的括号是多余的,修正为QtWidgets.QApplication(sys.argv)。
完成这些修改后,运行程序应该就能看到正常显示的Matplotlib图表了。核心修复点是确保绘图代码被执行、正确访问Matplotlib对象,以及触发画布的绘制操作。
内容的提问来源于stack exchange,提问作者erg
相关产品推荐
相关产品推荐

