Python 在tkinter画布小部件类中嵌入matplotlib图

Python 在tkinter画布小部件类中嵌入matplotlib图,python,matplotlib,tkinter,Python,Matplotlib,Tkinter,我尝试创建一个使用类的小tkinter GUI,如本频道所示 我的程序将通过tk.菜单加载一个CSV文件,并在画布内部打印一个图形。如果我加载另一个文件,图形将被清除并用两行重新创建。如果添加新文件,将增加图形中的行数,依此类推。我已经有了一个这样做的程序,但不使用类。Bellow是仅使用函数的程序的输出。 使用这些类为我提供了一个独特的窗口,我希望将其嵌入到画布中。 我认为解决办法很简单,但我自己看不出来 我的代码如下: f=图() 类起始页(传统框架): 定义初始化(自、父、控制器):

我尝试创建一个使用类的小tkinter GUI,如本频道所示

我的程序将通过tk.菜单加载一个CSV文件,并在画布内部打印一个图形。如果我加载另一个文件,图形将被清除并用两行重新创建。如果添加新文件,将增加图形中的行数,依此类推。我已经有了一个这样做的程序,但不使用类。Bellow是仅使用函数的程序的输出。

使用这些类为我提供了一个独特的窗口,我希望将其嵌入到画布中。

我认为解决办法很简单,但我自己看不出来

我的代码如下:

f=图()
类起始页(传统框架):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
label=tk.label(self,text=“起始页”,font=SMALL\u font)
标签包装(pady=10,padx=10)
btn_About=ttk.按钮(self,text=“About!”,
command=lambda:controller.show_帧(大约页))
btn_关于位置(relx=1.0,rely=0.0,anchor=NE)
#图形画布-->图形将显示的位置+导航工具栏
画布=图CAVASTKAGG(f,自我)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=True)
工具栏=导航工具栏2TK(画布,自我)
toolbar.update()
canvas.get_tk_widget().pack(side=tk.TOP,fill=tk.BOTH,expand=True)
用于显示图形的函数:

def PlotGraph():
全局计数
plt.clf()
#每次加载csv文件时获取的值
TakeValues()#x值相同,y值在变化
#使用numpy arange方法更改绘图轴比例
plt.xticks(np.arange(0,最大(扩展数据)))
plt.yticks(np.arange(minLSB_err,maxLSB_err))
如果计数!=0:
对于范围内的i(计数+1):
label=文件名\u dict[i]
plt.plot(扩展数据,ydata[i],label=label[:-4],lw=2)
其他:
label=filename\u dict[0]
plt.plot(扩展数据、ydata、label=label[:-4],lw=2)
plt.图例(bbox_至_锚=(0,1.02,1,102),loc=3,
ncol=2,borderaxespad=0)
产品名称(“全部错误”)
plt.xlabel(“施加的电压[V]”)
plt.ylabel(“LSB偏差”)
plt.紧_布局()
计数=计数+1
plt.draw()
尝试:
plt.show()
除(AttributeError)为e外:
打印(“出现错误:”,e)
[更新] PlotGraph()必须放置在何处,从何处调用它? 现在是这样的:

filemenu.add_命令(label=“Open”,command=PlotGraph)#打开CSV文件

谢谢。

正如@Henry Yik指定的那样,使用人像是可行的。StartPage类保持不变,但我添加了以下代码:

f = Figure()
a = f.add_subplot(111)
还更改了PlotGraph()函数,如下所示:

def PlotGraph():
全局计数
#每次加载csv文件时获取的值
TakeValues()#x值相同,y值在变化
a、 清除()
#使用numpy arange方法更改绘图轴比例
a、 set_xticks(np.arange(0,最大(扩展数据)))
a、 set_yticks(np.arange(minLSB_err,maxLSB_err))
如果计数!=0:
对于范围内的i(计数+1):
label=文件名\u dict[i]
a、 绘图(扩展数据,ydata[i],标签=标签[:-4],lw=2)
其他:
label=filename\u dict[0]
a、 绘图(扩展数据、ydata、label=label[:-4],lw=2)
a、 图例(bbox_至_锚=(0,1.02,1,102),loc=3,
ncol=2,borderaxespad=0)
a、 设置标题(“总错误”)
a、 设置标签(“施加的电压[V]”)
a、 设置标签(“LSB偏差”)
计数=计数+1
返回f

PlotGraph()不包括在任何类中。

如果要将图形嵌入到
tkinter
,请使用
Figure
而不是
pyplot
。请参阅以获取示例。实际上,使用Figure和子批次是可行的。但现在只有在调整窗口大小时,图形线才会显示。