基于matplotlib+tkinter实现简单的绘图系统

 更新时间:2023年08月08日 08:30:00   作者:微小冷  
在理解matplotlib嵌入到tkinter中的原理之后,就已经具备了打造绘图系统的技术基础,所以本文来实现一个简单的绘图系统,感兴趣的小伙伴小伙伴可以了解一下

绘图系统系列:python将matplotlib嵌入到tkinter中的步骤详解

封装成类

在理解matplotlib嵌入到tkinter中的原理之后,就已经具备了打造绘图系统的技术基础,接下来要做的,就是做一个较有可读性的绘图类,其实就是把前面的代码封装到class里而已,代码如下

import tkinter as tk
import tkinter.ttk as ttk
import matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figure
class DarwSystem():
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("数据展示工具")
        frmCtrl = ttk.Frame(self.root,width=320)
        frmCtrl.pack(side=tk.RIGHT)
        self.setFrmCtrl(frmCtrl)
        frmFig = ttk.Frame(self.root)
        frmFig.pack(side=tk.LEFT,fill=tk.BOTH,expand=tk.YES)
        self.setFrmFig(frmFig)
        self.root.mainloop()
    def setFrmCtrl(self, frmCtrl):
        pass
    def setFrmFig(self, frmFig):
        self.fig = Figure()
        self.canvas = FigureCanvasTkAgg(self.fig,frmFig)
        self.canvas.get_tk_widget().pack(
            side=tk.TOP,fill=tk.BOTH,expand=tk.YES)
        self.toolbar = NavigationToolbar2Tk(self.canvas,frmFig,
            pack_toolbar=False)
        self.toolbar.update()
        self.toolbar.pack(side=tk.RIGHT)

其中,setFrmCtrl用于设置控制面板,暂且pass掉,但后续会实现诸多功能;setFrmFig用于设置绘图界面,其中self.fig就是绘图窗口,后续若要画图,都要在这里设置坐标轴。

布局

最简单的绘图系统,也至少需要三个部件,分别用于输入x值、y值以及点击绘图按钮,从而setFrmCtrl函数可以先写为下面的形式

def setFrmCtrl(self, frmCtrl):
    frm = ttk.Frame(frmCtrl)
    frm.pack(side=tk.TOP, fill=tk.X)
    self.setCtrlButtons(frm)
    frm = ttk.Frame(frmCtrl)
    frm.pack(side=tk.TOP, fill=tk.X)
    self.setFrmX(frm)
    frm = ttk.Frame(frmCtrl)
    frm.pack(side=tk.TOP, fill=tk.X)
    self.setFrmY(frm)

这里面总计用了3个frm,分别用于存放控制按钮,设置x数据和y数据的模块,这三个模块的布局又分别设计了三个函数,即setFrmX, setFrmY以及setCtrlButtons:

def setFrmX(self, frm):
    tk.Label(frm, text="x").pack(side=tk.LEFT)
    self.xEntry = tk.Entry(frm)
    self.xEntry.pack(side=tk.LEFT, fill=tk.X)
def setFrmY(self, frm):
    tk.Label(frm, text="y").pack(side=tk.LEFT)
    self.yEntry = tk.Entry(frm)
    self.yEntry.pack(side=tk.LEFT, fill=tk.X)
def setCtrlButtons(self, frm):
    tk.Button(frm, text="绘图",width=5,
        command=self.btnDrawImg).pack(side=tk.LEFT)
# 绘图函数
def btnDrawImg(self):
    pass

其中btnDrawImg是绘图函数,尚未实现,所以被pass掉了,此时的布局结果如下,非常简单

实现绘图功能

接下来就是最核心的功能,实现绘图,主要包括两个步骤,一是读取x和y的值,二是用二者的值完成图像的绘制。

简单起见,这里用eval函数直接读取python表达式,同时为了让不熟悉Python的人也可以顺利生成x序列,将np.linspace隐去。则xEntry和yEntry的读取过程可写为

def btnDrawImg(self):
    x = eval(f"np.linspace({self.xEntry.get()})")
    self.ys = eval(self.yEntry.get())
    self.xs = x
    self.drawPlot()

self.drawPlot就是核心的绘图函数,主要流程与命令行调用plt如出一辙,首先创建一个坐标轴,然后在坐标轴上绘图,区别是最后需要调用self.canvas中的引擎来完成图像绘制

def drawPlot(self):
    self.fig.clf()
    ax = self.fig.add_subplot()
    ax.plot(self.xs, self.ys)
    self.fig.subplots_adjust(left=0.1, right=0.95, top=0.95, bottom=0.08)
    self.canvas.draw()

结果如下

状态栏的这些工具都可以无缝使用,非常便捷。

到此这篇关于基于matplotlib+tkinter实现简单的绘图系统的文章就介绍到这了,更多相关matplotlib tkinter绘图系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • windows环境中利用celery实现简单任务队列过程解析

    windows环境中利用celery实现简单任务队列过程解析

    这篇文章主要介绍了windows环境中利用celery实现简单任务队列过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • PyCharm运行环境切换过程

    PyCharm运行环境切换过程

    文章介绍了如何在PyCharm中切换到Anaconda环境以运行代码,具体步骤包括:进入设置,选择项目解释器,添加现有环境,并选择Anaconda环境中的python.exe文件路径
    2026-02-02
  • Google开源的Python格式化工具YAPF的安装和使用教程

    Google开源的Python格式化工具YAPF的安装和使用教程

    Google的开发者文档中有一套Python的代码书写规范,而在GitHub上同样开源了一款名为YAPF的命令行程序用作Python的格式化,下面我们就来看下这款Google开源的Python格式化工具YAPF的安装和使用教程
    2016-05-05
  • 夯实基础Python列表的索引和切片使用示例

    夯实基础Python列表的索引和切片使用示例

    这篇文章主要为大家介绍了Python列表的索引和切片使用示例基础详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • python线性插值解析

    python线性插值解析

    这篇文章主要介绍了python线性插值解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • pyd文件逆向的方法实现

    pyd文件逆向的方法实现

    pyd文件是由非 Python,其它编程语言编写编译生成的 Python 扩展模块,本文主要介绍了pyd文件逆向的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Python3 sort和sorted用法+cmp_to_key()函数详解

    Python3 sort和sorted用法+cmp_to_key()函数详解

    这篇文章主要介绍了Python3 sort和sorted用法+cmp_to_key()函数详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • python如何做代码性能分析

    python如何做代码性能分析

    这篇文章主要介绍了python如何做代码性能分析,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • Python编程深度学习绘图库之matplotlib

    Python编程深度学习绘图库之matplotlib

    今天小编就为大家分享一篇关于Python编程深度学习绘图库之matplotlib,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Python七种距离度量方法全解析

    Python七种距离度量方法全解析

    这篇文章主要介绍了Python七种距离度量方法的相关资料,包括曼哈顿距离、欧氏距离、切比雪夫距离和明科夫斯基距离,并提供每种距离的具体计算示例及其应用场景,帮助大家更好地理解距离度量,需要的朋友可以参考下
    2026-01-01

最新评论