python將matplotlib嵌入到tkinter中的步驟詳解
matplotlib窗口組成
tkinter是Python標(biāo)準(zhǔn)庫(kù)中自帶的GUI工具,使用十分方便,如能將matplotlib嵌入到tkinter中,就可以做出相對(duì)專業(yè)的數(shù)據(jù)展示系統(tǒng),很有競(jìng)爭(zhēng)力。
在具體實(shí)現(xiàn)之前,可以先看一下典型的 matplotlib
窗口
import numpy as np import matplotlib.pyplot as plt plt.plot(np.arange(100)) plt.show()
然后就看到了我們熟悉的plot圖
這個(gè)圖由兩部分構(gòu)成,分別是上面用于繪圖的FigureCanvasTkAgg畫布,以及下方的工具欄NavigationToolbar2Tk,二者存放在matplotlib.backends.backend_tkagg中,這兩個(gè)組件在地位上和tkinter中的組件是等同的。
但除此之外還不夠,因?yàn)楫嫴疾⒉灰馕吨袌D像,故而還要導(dǎo)入繪圖窗口Figure,故而將matplotlib嵌入到tkinter中,最少需要使用下面的這些模塊
import tkinter as tk import tkinter.ttk as ttk import matplotlib as mpl mpl.use('TkAgg') # 啟用tkinter渲染matplotlib,從而可以嵌入到tkinter中 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import ( FigureCanvasTkAgg, NavigationToolbar2Tk) from matplotlib.figure import Figure import numpy as np
其中,mpl.use(‘TkAgg’)用于啟用tkinter渲染matplotlib,從而可以嵌入到tkinter中。
tkinter布局
在了解原理之后,具體實(shí)現(xiàn)就不難了。在嵌入matplotlib之前,可先對(duì)tkinter窗口做下布局,代碼如下所示,首先創(chuàng)建一個(gè)標(biāo)題為"數(shù)據(jù)展示工具"的窗口root,并為其添加兩個(gè)控件,分別是右側(cè)的frmCtrl和左側(cè)的frmFigure,前者用于添加控件,后者用于嵌入圖像
root = tk.Tk() root.title("數(shù)據(jù)展示工具") frmCtrl = ttk.Frame(root, width=200) frmCtrl.pack(side=tk.RIGHT) frmFigure = ttk.Frame(root) frmFigure.pack(side=tk.LEFT, fill=tk.BOTH, expand=tk.YES)
嵌入圖像
正如一開始所說(shuō)的,matplotlib的繪圖窗口由兩部分構(gòu)成,分別是繪圖畫布和工具欄,而繪圖畫布又要包含圖像,所以先創(chuàng)建一個(gè)Figure,在將其導(dǎo)入到FigureCanvasTkAgg中。
fig = Figure() canvas = FigureCanvasTkAgg(fig,frmFigure) canvas.get_tk_widget().pack( side=tk.TOP,fill=tk.BOTH,expand=tk.YES) toolbar = NavigationToolbar2Tk(canvas,frmFigure, pack_toolbar=False) toolbar.update() toolbar.pack(side=tk.RIGHT)
其中,canvas是繪圖畫布,toolbar是工具欄。至此,就已經(jīng)完成了圖像的嵌入工作,接下來(lái)要做的,就是跑死循環(huán),從而把這個(gè)嵌入了繪圖工具的窗口顯示出來(lái)
root.mainloop()
結(jié)果如下
這個(gè)圖的左側(cè)顯然就是matplotlib引入的繪圖畫布,右側(cè)則是frmCtrl,主要是為了更加清晰地證明,畫布的確嵌入到了tkinter窗口中。
如果覺(jué)得不過(guò)癮,可以在創(chuàng)建fig之后,再畫一個(gè)圖像上去,代碼如下
ax = fig.add_subplot() ax.plot(np.arange(100))
然后再執(zhí)行root.mainloop(),就可以得到下圖
到此這篇關(guān)于python將matplotlib嵌入到tkinter中的步驟詳解的文章就介紹到這了,更多相關(guān)python將matplotlib嵌入tkinter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python tkinter控件treeview的數(shù)據(jù)列表顯示的實(shí)現(xiàn)示例
本文主要介紹了python tkinter控件treeview的數(shù)據(jù)列表顯示的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01python 讀取yaml文件的兩種方法(在unittest中使用)
這篇文章主要介紹了python 讀取yaml文件的兩種方法(在unittest中使用),幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12Python基于分析Ajax請(qǐng)求實(shí)現(xiàn)抓取今日頭條街拍圖集功能示例
這篇文章主要介紹了Python基于分析Ajax請(qǐng)求實(shí)現(xiàn)抓取今日頭條街拍圖集功能,涉及Python針對(duì)今日頭條URL請(qǐng)求與json數(shù)據(jù)處理相關(guān)操作技巧,需要的朋友可以參考下2018-07-07解決python 執(zhí)行shell命令無(wú)法獲取返回值的問(wèn)題
這篇文章主要介紹了解決python 執(zhí)行shell命令無(wú)法獲取返回值的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Flask框架Flask-Principal基本用法實(shí)例分析
這篇文章主要介紹了Flask框架Flask-Principal基本用法,結(jié)合實(shí)例形式分析了Flask框架flask-principal擴(kuò)展的基本功能、安裝、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-07-07使用Python連接SQLite數(shù)據(jù)庫(kù)的操作步驟
SQLite是一種輕量級(jí)的嵌入式數(shù)據(jù)庫(kù),廣泛應(yīng)用于各種應(yīng)用程序中,Python提供了內(nèi)置的sqlite3模塊,使得連接和操作SQLite數(shù)據(jù)庫(kù)變得非常簡(jiǎn)單,本文給大家介紹了使用Python連接SQLite數(shù)據(jù)庫(kù)的操作步驟,需要的朋友可以參考下2024-12-12Python中無(wú)限元素列表的實(shí)現(xiàn)方法
這篇文章主要介紹了Python中無(wú)限元素列表的實(shí)現(xiàn)方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08Python 實(shí)現(xiàn)取矩陣的部分列,保存為一個(gè)新的矩陣方法
今天小編就為大家分享一篇Python 實(shí)現(xiàn)取矩陣的部分列,保存為一個(gè)新的矩陣方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11