在PyQt5中使用matplotlib画图不刷新如何解决

  介绍

这篇文章将为大家详细讲解有关在PyQt5中使用matplotlib画图不刷新如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

如下图:

在PyQt5中使用matplotlib画图不刷新如何解决

我遇到的问题是:当完成一个番茄钟后,需要对统计数据进行刷新,但是重新调用一下画图函数无效、下面贴出调用的这个画图函数:

class  MyFigure (FigureCanvas, QWidget):   ,def  __init__(自我、父母=None, minWidth=600,, minHeight=380,, dpi=120):   #第才能一步:创建一个创建图   self.fig 才能=,图(figsize=(8, 8), dpi=dpi)   #第才能二步:在父类中* *图窗口   超级才能(MyFigure,自我). __init__ (self.fig), #此句必不可少,否则不能显示图形   #第才能三步:创建一个子图,用于绘制图形用,111表示子图编的号,如matlab的次要情节(1,1,1)   时间=self.axes 才能;self.fig.add_subplot (111)   self.setMinimumSize才能(minWidth, minHeight)   FigureCanvas.updateGeometry才能(自我)   ,#第四步:就是画的图,【可以在此类中画,也可以在其它类中画】   ,#画日分布图,   ,def  drawDayChart(自我):   periodHour才能=[& # 39;0 & # 39;+ str (i), if  i<10, else  str (i), for 小姐:拷贝范围(24)]   periodDict才能=dict (zip (periodHour, [0] * 24))   with 才能打开(& # 39;configfile/history.txt& # 39;,, & # 39; " # 39;), as  f:   ,,行=f.readlines ()   ,,for  line 拷贝:   ,,,时间=线[11:13]   ,,,periodDict[时间]+=1   periodDictKeys才能=periodDict.keys ()   periodDictValues才能=periodDict.values ()   矩形才能=self.axes.bar (periodDictKeys, periodDictValues,,对齐=& # 39;边缘# 39;,,宽度=0.9,,颜色=& # 39;绿色# 39;)   self.axes.set_ylabel才能(& # 39;番茄钟个数& # 39;)   self.axes.set_title才能(& # 39;番茄钟日分布& # 39;,,颜色=& # 39;蓝# 39;)   for 才能;rect 拷贝矩形:   ,,x=rect.get_x ()   ,,y=rect.get_height ()   ,,如果(y==0):   ,才能继续   ,,self.axes.text (x,, 1.01 * y, str (y),弗吉尼亚州=& # 39;底部# 39;)

二,解决思路

1,首先确定每次刷新的时候,穿给图标的数据是否真正刷新,确定这一点后

2,尝试使用self.axes.clear()将之前画的图删除掉,然后重画——尝试后仍然不行

3,谷歌:如何更新matplotlib的阴谋?

找到了这么几行代码:

, fig.canvas.draw ()   之前,fig.canvas.flush_events ()

于是去matplotlib官网查文档,在我的函数中加入了self.fig.canvas.draw_idle ()。

4,成功实现了刷新

最后的代码:

class  MyFigure (FigureCanvas, QWidget):   ,def  __init__(自我、父母=None, minWidth=600,, minHeight=380,, dpi=120):   #第才能一步:创建一个创建图   self.fig 才能=,图(figsize=(8, 8), dpi=dpi)   #第才能二步:在父类中* *图窗口   超级才能(MyFigure,自我). __init__ (self.fig), #此句必不可少,否则不能显示图形   #第才能三步:创建一个子图,用于绘制图形用,111表示子图编的号,如matlab的次要情节(1,1,1)   时间=self.axes 才能;self.fig.add_subplot (111)   self.setMinimumSize才能(minWidth, minHeight)   FigureCanvas.updateGeometry才能(自我)   ,#第四步:就是画的图,【可以在此类中画,也可以在其它类中画】   ,#画日分布图,   ,def  drawDayChart(自我):   periodHour才能=[& # 39;0 & # 39;+ str (i), if  i<10, else  str (i), for 小姐:拷贝范围(24)]   periodDict才能=dict (zip (periodHour, [0] * 24))   with 才能打开(& # 39;configfile/history.txt& # 39;,, & # 39; " # 39;), as  f:   ,,行=f.readlines ()   ,,for  line 拷贝:   ,,,时间=线[11:13]   ,,,periodDict[时间]+=1   periodDictKeys才能=periodDict.keys ()   periodDictValues才能=periodDict.values ()   #才能实现刷新的条件1   self.axes.clear才能()   矩形才能=self.axes.bar (periodDictKeys, periodDictValues,,对齐=& # 39;边缘# 39;,,宽度=0.9,,颜色=& # 39;绿色# 39;)   #才能实现刷新的条件2   self.fig.canvas.draw_idle才能()   self.axes.set_ylabel才能(& # 39;番茄钟个数& # 39;)   self.axes.set_title才能(& # 39;番茄钟日分布& # 39;,,颜色=& # 39;蓝# 39;)   for 才能;rect 拷贝矩形:   ,,x=rect.get_x ()   ,,y=rect.get_height ()   ,,如果(y==0):   ,才能继续   ,,self.axes.text (x,, 1.01 * y, str (y),弗吉尼亚州=& # 39;底部# 39;)

在PyQt5中使用matplotlib画图不刷新如何解决