介绍
这篇文章将为大家详细讲解有关在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画图不刷新如何解决