matplotlib教程——matplotlib与tkinter集成

640?wx_fmt=jpeg

640?wx_fmt=png

进入正文


一、概述
640?wx_fmt=other

   

matplotlib是Python生态圈里面最为流行的图形可视化库,提供了庞大而且完善的绘图功能,在绝大多数情况下,基本上只要是你想要实现的功能,均可以通过matplotlib完成。

tkinter是python系统自带的GUI可视化库,原理简单,非常方便我们实现桌面应用程序。

有时候我们在使用Python边写桌面应用程序的时候,希望在窗体程序内部展现绘图细节和绘图功能,本文的主要内容就是tkinter+matplotlib。

当然窗体化的绘图还有其他的解决方案,比如使用使用Chaco绘图库也可以实现类似的功能。

Next

二、实现代码

实现代码
matplotlib+tkinter

2.1

import math

import numpy as np   

#-------------------------------------------------------------------------------------------

import matplotlib

import matplotlib.pyplot as plt

from matplotlib.pylab import mpl

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2Tk #NavigationToolbar2TkAgg

#------------------------------------------------------------------------------------------

import tkinter as tk

#------------------------------------------------------------------------
mpl.rcParams['font.sans-serif'] = ['SimHei']  #中文显示

mpl.rcParams['axes.unicode_minus']=False      #负号显示



class From:

    def __init__(self): 

        self.root=tk.Tk()                    #创建主窗体

        self.canvas=tk.Canvas()              #创建一块显示图形的画布

        self.figure=self.create_matplotlib() #返回matplotlib所画图形的figure对象

        self.create_form(self.figure)        #将figure显示在tkinter窗体上面

        self.root.mainloop()



    def create_matplotlib(self):

        #创建绘图对象f

        f=plt.figure(num=2,figsize=(16,12),dpi=80,facecolor="pink",edgecolor='green',frameon=True)

        #创建一副子图

        fig1=plt.subplot(1,1,1)



        x=np.arange(0,2*np.pi,0.1)

        y1=np.sin(x)

        y2=np.cos(x)



        line1,=fig1.plot(x,y1,color='red',linewidth=3,linestyle='--')    #画第一条线

        line2,=fig1.plot(x,y2) 

        plt.setp(line2,color='black',linewidth=8,linestyle='-',alpha=0.3)#华第二条线



        fig1.set_title("这是第一幅图",loc='center',pad=20,fontsize='xx-large',color='red')    #设置标题

        line1.set_label("正弦曲线")                                                           #确定图例

        fig1.legend(['正弦','余弦'],loc='upper left',facecolor='green',frameon=True,shadow=True,framealpha=0.5,fontsize='xx-large')



        fig1.set_xlabel('横坐标')                                                             #确定坐标轴标题

        fig1.set_ylabel("纵坐标")

        fig1.set_yticks([-1,-1/2,0,1/2,1])                                                   #设置坐标轴刻度

        fig1.grid(which='major',axis='x',color='r', linestyle='-', linewidth=2)              #设置网格



        return f



    def create_form(self,figure):

        #把绘制的图形显示到tkinter窗口上

        self.canvas=FigureCanvasTkAgg(figure,self.root)

        self.canvas.draw()  #以前的版本使用show()方法,matplotlib 2.2之后不再推荐show()用draw代替,但是用show不会报错,会显示警告

        self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)



        #把matplotlib绘制图形的导航工具栏显示到tkinter窗口上

        toolbar =NavigationToolbar2Tk(self.canvas, self.root) #matplotlib 2.2版本之后推荐使用NavigationToolbar2Tk,若使用NavigationToolbar2TkAgg会警告

        toolbar.update()

        self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)



if __name__=="__main__":

    form=From()

Next

三、绘图步骤总结

640?wx_fmt=other

matplotlib和tkinter的集成主要是分为两个部分:

第一部分是将绘制的图形结合tkinter,实现该功能遵循“三步走”,三个步骤。

第二部分是将matplotlib自带的工具条结合tkinter,实现该功能也是遵循“三步走”,三个步骤。

绘图步骤总结
图像与tkinter集成

3.1

#把绘制的图形显示到tkinter窗口上
#第一步 :当然这里不一定显示在root,可以使frame,tabcontrol等等
self.canvas=FigureCanvasTkAgg(figure,self.root)

#第二步:
self.canvas.draw() 

#第三步 :以前的版本使用show()方法,matplotlib 2.2之后不再推荐show()用draw代替,但是用show不会报错,会显示警告
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

实现代码
toolbar+tkinter

3.2

#第一步 :把matplotlib绘制图形的导航工具栏显示到tkinter窗口上
toolbar =NavigationToolbar2Tk(self.canvas, self.root) #matplotlib 2.2版本之后推荐使用NavigationToolbar2Tk,若使用 NavigationToolbar2TkAgg会警告

#第二步 :
toolbar.update()

#第三步:
self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)

Next

四、实现效果

640?wx_fmt=png

Next

全文总结

matplotlib结合tkinter是可以做出比较强大的桌面程序的,也可以实现较为美观的可视化操作,本文只是实现,很多的美化操作没有实现,相关的配置可以参考之前写的文章。在具体的实现的时候,按照步骤一步一步来,就可以了,当然还会有其他的实现方式,若您看过文章之后有什么疑问,或者是有什么更好的提议,欢迎一起交流!

END

往期回顾

640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值