import sys import tkinter as Tk import matplotlib from numpy import arange, sin, pi from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg from matplotlib.backend_bases import key_press_handler from matplotlib.figure import Figure matplotlib.use('TkAgg') root = Tk.Tk() root.title("matplotlib in TK") # 設置圖形尺寸與質量 f = Figure(figsize=(5, 4), dpi=100) a = f.add_subplot(111) t = arange(0.0, 3, 0.01) s = sin(2 * pi * t) # 繪製圖形 a.plot(t, s) # 把繪製的圖形顯示到tkinter窗口上 canvas = FigureCanvasTkAgg(f, master=root) canvas.show() canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) # 把matplotlib繪製圖形的導航工具欄顯示到tkinter窗口上 toolbar = NavigationToolbar2TkAgg(canvas, root) toolbar.update() canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) # 定義並綁定鍵盤事件處理函數 def on_key_event(event): print('you pressed %s' % event.key) key_press_handler(event, canvas, toolbar) canvas.mpl_connect('key_press_event', on_key_event) # 按鈕單擊事件處理函數 def _quit(): # 結束事件主循環,並銷燬應用程序窗口 root.quit() root.destroy() button = Tk.Button(master=root, text='Quit', command=_quit) button.pack(side=Tk.BOTTOM) Tk.mainloop()
編譯顯示UserWarning: canvas
This call to matplotlib.use() has no effect because the backend has alreadybeen chosen; matplotlib.use() must be called *before* pylab, matplotlib.pyplot, or matplotlib.backends is imported for the first time.ide
stackoverflow上的解釋是把 matplotlib.use('Agg') 放到 import matplotlib 的下一行,可行。函數