基于matplotlib+tkinter實(shí)現(xiàn)簡單的繪圖系統(tǒng)
繪圖系統(tǒng)系列:python將matplotlib嵌入到tkinter中的步驟詳解
封裝成類
在理解matplotlib嵌入到tkinter中的原理之后,就已經(jīng)具備了打造繪圖系統(tǒng)的技術(shù)基礎(chǔ),接下來要做的,就是做一個較有可讀性的繪圖類,其實(shí)就是把前面的代碼封裝到class里而已,代碼如下
import tkinter as tk
import tkinter.ttk as ttk
import matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figure
class DarwSystem():
def __init__(self):
self.root = tk.Tk()
self.root.title("數(shù)據(jù)展示工具")
frmCtrl = ttk.Frame(self.root,width=320)
frmCtrl.pack(side=tk.RIGHT)
self.setFrmCtrl(frmCtrl)
frmFig = ttk.Frame(self.root)
frmFig.pack(side=tk.LEFT,fill=tk.BOTH,expand=tk.YES)
self.setFrmFig(frmFig)
self.root.mainloop()
def setFrmCtrl(self, frmCtrl):
pass
def setFrmFig(self, frmFig):
self.fig = Figure()
self.canvas = FigureCanvasTkAgg(self.fig,frmFig)
self.canvas.get_tk_widget().pack(
side=tk.TOP,fill=tk.BOTH,expand=tk.YES)
self.toolbar = NavigationToolbar2Tk(self.canvas,frmFig,
pack_toolbar=False)
self.toolbar.update()
self.toolbar.pack(side=tk.RIGHT)其中,setFrmCtrl用于設(shè)置控制面板,暫且pass掉,但后續(xù)會實(shí)現(xiàn)諸多功能;setFrmFig用于設(shè)置繪圖界面,其中self.fig就是繪圖窗口,后續(xù)若要畫圖,都要在這里設(shè)置坐標(biāo)軸。
布局
最簡單的繪圖系統(tǒng),也至少需要三個部件,分別用于輸入x值、y值以及點(diǎn)擊繪圖按鈕,從而setFrmCtrl函數(shù)可以先寫為下面的形式
def setFrmCtrl(self, frmCtrl):
frm = ttk.Frame(frmCtrl)
frm.pack(side=tk.TOP, fill=tk.X)
self.setCtrlButtons(frm)
frm = ttk.Frame(frmCtrl)
frm.pack(side=tk.TOP, fill=tk.X)
self.setFrmX(frm)
frm = ttk.Frame(frmCtrl)
frm.pack(side=tk.TOP, fill=tk.X)
self.setFrmY(frm)這里面總計(jì)用了3個frm,分別用于存放控制按鈕,設(shè)置x數(shù)據(jù)和y數(shù)據(jù)的模塊,這三個模塊的布局又分別設(shè)計(jì)了三個函數(shù),即setFrmX, setFrmY以及setCtrlButtons:
def setFrmX(self, frm):
tk.Label(frm, text="x").pack(side=tk.LEFT)
self.xEntry = tk.Entry(frm)
self.xEntry.pack(side=tk.LEFT, fill=tk.X)
def setFrmY(self, frm):
tk.Label(frm, text="y").pack(side=tk.LEFT)
self.yEntry = tk.Entry(frm)
self.yEntry.pack(side=tk.LEFT, fill=tk.X)
def setCtrlButtons(self, frm):
tk.Button(frm, text="繪圖",width=5,
command=self.btnDrawImg).pack(side=tk.LEFT)
# 繪圖函數(shù)
def btnDrawImg(self):
pass其中btnDrawImg是繪圖函數(shù),尚未實(shí)現(xiàn),所以被pass掉了,此時的布局結(jié)果如下,非常簡單

實(shí)現(xiàn)繪圖功能
接下來就是最核心的功能,實(shí)現(xiàn)繪圖,主要包括兩個步驟,一是讀取x和y的值,二是用二者的值完成圖像的繪制。
簡單起見,這里用eval函數(shù)直接讀取python表達(dá)式,同時為了讓不熟悉Python的人也可以順利生成x序列,將np.linspace隱去。則xEntry和yEntry的讀取過程可寫為
def btnDrawImg(self):
x = eval(f"np.linspace({self.xEntry.get()})")
self.ys = eval(self.yEntry.get())
self.xs = x
self.drawPlot()self.drawPlot就是核心的繪圖函數(shù),主要流程與命令行調(diào)用plt如出一轍,首先創(chuàng)建一個坐標(biāo)軸,然后在坐標(biāo)軸上繪圖,區(qū)別是最后需要調(diào)用self.canvas中的引擎來完成圖像繪制
def drawPlot(self):
self.fig.clf()
ax = self.fig.add_subplot()
ax.plot(self.xs, self.ys)
self.fig.subplots_adjust(left=0.1, right=0.95, top=0.95, bottom=0.08)
self.canvas.draw()結(jié)果如下

狀態(tài)欄的這些工具都可以無縫使用,非常便捷。
到此這篇關(guān)于基于matplotlib+tkinter實(shí)現(xiàn)簡單的繪圖系統(tǒng)的文章就介紹到這了,更多相關(guān)matplotlib tkinter繪圖系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows環(huán)境中利用celery實(shí)現(xiàn)簡單任務(wù)隊(duì)列過程解析
這篇文章主要介紹了windows環(huán)境中利用celery實(shí)現(xiàn)簡單任務(wù)隊(duì)列過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Google開源的Python格式化工具YAPF的安裝和使用教程
Google的開發(fā)者文檔中有一套Python的代碼書寫規(guī)范,而在GitHub上同樣開源了一款名為YAPF的命令行程序用作Python的格式化,下面我們就來看下這款Google開源的Python格式化工具YAPF的安裝和使用教程2016-05-05
夯實(shí)基礎(chǔ)Python列表的索引和切片使用示例
這篇文章主要為大家介紹了Python列表的索引和切片使用示例基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Python3 sort和sorted用法+cmp_to_key()函數(shù)詳解
這篇文章主要介紹了Python3 sort和sorted用法+cmp_to_key()函數(shù)詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
Python編程深度學(xué)習(xí)繪圖庫之matplotlib
今天小編就為大家分享一篇關(guān)于Python編程深度學(xué)習(xí)繪圖庫之matplotlib,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12

