目錄html
當有一天,你所學的東西連成一條線。那會是一種什麼樣的體會?python
之前學習tkinter,如今學習matplotlib,當tkinter趕上matplotlib會不會產生火花嘞。canvas
今天咱們開始學習再tkinter裏內嵌matplotlib,實現自定製的繪圖和自定製的窗體。框架
咱們先來看一下,本小節最終的效果ide
https://matplotlib.org/gallery/index.html函數
該頁面內容比較大,不容易找到須要的內容。能夠再側旁的目錄下-找到"Embedding Matplotlib in graphical user interfaces",即是。工具
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.
如下是本人對官方教程的解讀,有出錯之處,還請大佬們多多指出。學習
# 導入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()