Matplotlib是Python语言及其数值计算库NumPy的绘图库。它提供了一个物件导向的API,可以将绘图嵌入到使用通用GUI工具包(如Tkinter、wxPython、Qt或GTK)的程序中。
如何在Tkinter应用中嵌入Matplotlib绘图?
在Tkinter中嵌入Matplotlib绘图的关键两个类:FigureCanvasTkAgg、NavigationToolbar2Tk。
Matplotlib 为我们提供了几个类,允许将 Matplotlib 图形和绘图功能集成到Tkinter GUI中。其中一个类是FigureCanvasTkAgg,它是一种特殊的画布,可以在其上绘制 Matplotlib 图形,并且它 也可以作为常规 Tkinter 小部件插入到 Tkinter GUI 中。
而NavigationToolbar2Tk类用于添加导航工具栏,提供了与图形交互的有用功能,例如Zoom in、Zoom out、Save Graph等,如果不需要导航工具栏,可不使用NavigationToolbar2Tk类。
Figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
Matplotlib 有一个称为backends的特殊模块,其中包含用于与 Tkinter 等其他流行库集成的各种子模块。Tkinter 的后端库称为backend_tkagg,它包含可用于 Matplotlib 和 Tkinter 集成的各种类。这是我们将从中导入FigureCanvasTkAgg 的地方。
该类的第一个参数FigureCanvasTkAgg()是 Matplotlib 图对象,第二个参数是 Tkinter 应用程序的根对象。
import tkinter as tk
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg,
NavigationToolbar2Tk
)
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title('Tkinter Matplotlib Demo')
# prepare data
data = {
'Python': 11.27,
'C': 11.16,
'Java': 10.46,
'C++': 7.5,
'C#': 5.26
}
languages = data.keys()
popularity = data.values()
# 步骤1:创建一个图对象
figure = Figure(figsize=(6, 4), dpi=100)
# 步骤2:创建FigureCanvasTkAgg 对象,添加一个画布figure_canvas
figure_canvas = FigureCanvasTkAgg(figure, self)
# 添加导航工具栏,必须要先创建FigureCanvasTkAgg 对象(非必须)
NavigationToolbar2Tk(figure_canvas, self)
# 步骤3:创建子图 axes 坐标轴
axes = figure.add_subplot()
# 步骤4:绘图,创建直方图
axes.bar(languages, popularity)
axes.set_title('Top 5 Programming Languages')
axes.set_ylabel('Popularity')
#步骤5:画布布局,嵌入Tkinter
figure_canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
if __name__ == '__main__':
app = App()
app.mainloop()