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

目录

前言

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

之前学习tkinter,如今学习matplotlib,当tkinter赶上matplotlib会不会产生火花嘞。canvas

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

(一)小目标

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

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-pyoop

(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 周五

相关文章
相关标签/搜索