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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM