• tkinter内嵌Matplotlib系列(一)之解读官网教材


    目录

    前言

    当有一天,你所学的东西连成一条线。那会是一种什么样的体会?

    以前学习tkinter,现在学习matplotlib,当tkinter遇上matplotlib会不会产生火花嘞。

    今天我们开始学习再tkinter里内嵌matplotlib,实现自定制的绘图和自定制的窗体。

    (一)小目标

    我们先来看一下,本小节最终的效果

    1.首页卷面:

    01.png

    2.绘制一条函数曲线:

    02.png

    3.绘制多条曲线:

    03.png

    (二)官方教材

    1.对GUI框架的支持:

    (1)官方网站

    https://matplotlib.org/gallery/index.html

    该页面内容比较大,不容易找到需要的内容。可以再侧旁的目录下-找到"Embedding Matplotlib in graphical user interfaces",便是。

    05.png

    (2)各种GUI说明截图:

    04.png

    2.内嵌于tkinter的说明文档:

    (1)官方网站

    https://matplotlib.org/gallery/user_interfaces/embedding_in_tk_sgskip.html#sphx-glr-gallery-user-interfaces-embedding-in-tk-sgskip-py

    (2)实例源代码:

    import tkinter
    
    from matplotlib.backends.backend_tkagg import (
        FigureCanvasTkAgg, NavigationToolbar2Tk)
    # Implement the default Matplotlib key bindings.
    from matplotlib.backend_bases import key_press_handler
    from matplotlib.figure import Figure
    
    import numpy as np
    
    
    root = tkinter.Tk()
    root.wm_title("Embedding in Tk")
    
    fig = Figure(figsize=(5, 4), dpi=100)
    t = np.arange(0, 3, .01)
    fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
    
    canvas = FigureCanvasTkAgg(fig, master=root)  # A tk.DrawingArea.
    canvas.draw()
    canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
    
    toolbar = NavigationToolbar2Tk(canvas, root)
    toolbar.update()
    canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
    
    
    def on_key_press(event):
        print("you pressed {}".format(event.key))
        key_press_handler(event, canvas, toolbar)
    
    
    canvas.mpl_connect("key_press_event", on_key_press)
    
    
    def _quit():
        root.quit()     # stops mainloop
        root.destroy()  # this is necessary on Windows to prevent
                        # Fatal Python Error: PyEval_RestoreThread: NULL tstate
    
    
    button = tkinter.Button(master=root, text="Quit", command=_quit)
    button.pack(side=tkinter.BOTTOM)
    
    tkinter.mainloop()
    # If you put root.destroy() here, it will cause an error if the window is
    # closed with the window manager.
    

    (3)实例的输出效果:

    06.png

    (三)对官方教程的解读

    以下是本人对官方教程的解读,有出错之处,还请大佬们多多指出。

    # 导入tkinter模块
    import tkinter
    
    # 创建画布需要的库
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    
    # 创建工具栏需要的库
    from matplotlib.backends.backend_tkagg import NavigationToolbar2Tk
    
    # 快捷键需要的模块
    from matplotlib.backend_bases import key_press_handler
    
    # 导入绘图需要的模块
    from matplotlib.figure import Figure
    
    
    
    # 实例化一个根窗口与设置标题
    root = tkinter.Tk()
    root.wm_title("Embedding in Tk")
    
    # 画布的大小和分别率
    fig = Figure(figsize=(5, 4), dpi=100)
    
    
    
    # 利用子图画图
    axc = fig.add_subplot(111)
    axc.plot([1, 2, 3, 4, 5])
    
    # 创建画布控件
    canvas = FigureCanvasTkAgg(fig, master=root)  # A tk.DrawingArea.
    canvas.draw()
    # 显示画布控件
    canvas.get_tk_widget().pack()
    
    # 创建工具条控件
    toolbar = NavigationToolbar2Tk(canvas, root)
    toolbar.update()
    # 显示工具条控件
    canvas.get_tk_widget().pack()
    
    
    # 绑定快捷键函数
    def on_key_press(event):
        print("you pressed {}".format(event.key))
        key_press_handler(event, canvas, toolbar)
    
    
    # 调用快捷键函数
    canvas.mpl_connect("key_press_event", on_key_press)
    
    
    # 退出函数
    def _quit():
        root.quit()
        root.destroy()
    
    
    # 退出按钮控件
    button = tkinter.Button(master=root, text="Quit", command=_quit)
    button.pack(side=tkinter.BOTTOM)
    
    # 消息循环
    tkinter.mainloop()
    

    作者:Mark

    日期:2019/02/15 周五

  • 相关阅读:
    E
    牛客比赛—身体训练
    前缀和例题
    欧拉函数模板
    3.30训练题
    poj1321棋盘问题
    记set学习
    B. K-th Beautiful String
    codeforces1293C
    LightOJ 1370 Bi-shoe and Phi-shoe
  • 原文地址:https://www.cnblogs.com/zyg123/p/10385456.html
Copyright © 2020-2023  润新知