缘由:设备需要做一个界面,配置参数,而且校准需要波形显示,本来想用pyqt 的但是时间有点紧,暂时就用 pysimplegui 凑合,虽然丑一点
实现:
关键代码:
def make_figure(): # 初始化条用
global x,y
global fig
x = np.arange(0, 3, .01)
y = 2 * np.sin(2 * np.pi * x)
max_index = np.argmax(y)
min_index = np.argmin(y)
fig = plt.figure(facecolor="lightgray")
plt.grid(True)
#plt.plot(max_index/29, y[max_index], 'ks')
#plt.plot(min_index/29, y[min_index], 'gs')
#plt.plot(x, y)
plt.title(u"matplot 测试")
plt.xlabel('x')
plt.ylabel('y')
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
return fig
def make_figure1():# 更新波形需每次调用
global x,y
global fig
max_index = np.argmax(y)
min_index = np.argmin(y)
plt.grid(True)
plt.plot(max_index/29, y[max_index], 'rs')
plt.plot(min_index/29, y[min_index], 'gs')
#plt.plot(x, y)
plt.title(u"matplot ")
plt.xlabel('x')
plt.ylabel('y')
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
return fig
#画在canvas上,包括工具条(工具条屏蔽掉了)
def draw_figure(canvas,canvas_toolbar, figure):
global figure_canvas_agg
global toolbar
figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
figure_canvas_agg.draw()
#toolbar = NavigationToolbar2Tk(figure_canvas_agg,canvas_toolbar)
#toolbar.update()
figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
return figure_canvas_agg
主函数:
x = np.arange(0, 4, .01) #重新更新数据
y =np.sin(2 * np.pi * x)+ random.uniform(1.1,1.4)
figure_canvas_agg.draw() # 更新画布
fig.clear() # 防止波形重叠
make_figure1() #重新绘制波形
plt.plot(x, y)
遇到的问题:
1.图像不能更新的问题
解决:
我们在主函数中调用
figure_canvas_agg.draw() # 更新画布
plt.plot(x, y)
2.图像覆盖的问题
解决;
fig.clear() # 防止波形重叠
make_figure1() #重新绘制波形
3.出现两个plot 同步更新的 波形
主要因为在主函数中调用了plot.pause(0.01) 这个函数在普通的动图中有用,但是这种嵌入式的使用方式上会出问题