Python Tkinter 教程:如何使用Matplotlib在Tkinter中绘图

0.引言

Matplotlib是Python语言及其数值计算库NumPy的绘图库。它提供了一个物件导向的API,可以将绘图嵌入到使用通用GUI工具包(如Tkinter、wxPython、Qt或GTK)的程序中。
如何在Tkinter应用中嵌入Matplotlib绘图?

图 1 Tkinter应用中嵌入Matplotlib绘图实例

1.实现

在Tkinter中嵌入Matplotlib绘图的关键两个类:FigureCanvasTkAggNavigationToolbar2Tk
Matplotlib 为我们提供了几个类,允许将 Matplotlib 图形和绘图功能集成到Tkinter GUI中。其中一个类是FigureCanvasTkAgg,它是一种特殊的画布,可以在其上绘制 Matplotlib 图形,并且它 也可以作为常规 Tkinter 小部件插入到 Tkinter GUI 中。
而NavigationToolbar2Tk类用于添加导航工具栏,提供了与图形交互的有用功能,例如Zoom in、Zoom out、Save Graph等,如果不需要导航工具栏,可不使用NavigationToolbar2Tk类。

图 2 不使用NavigationToolbar2Tk类添加导航栏效果

Figure类

Figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

  • num:图像编号或名称,数字为编号 ,字符串为名称
  • figsize:指定figure的宽和高,单位为英寸;
  • dpi:参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80
  • facecolor:背景颜色
  • edgecolor:边框颜色
  • frameon:是否显示边框
  • FigureCanvasTkAgg类

    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()
    

    作者:hj0425

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python Tkinter 教程:如何使用Matplotlib在Tkinter中绘图

    发表回复