欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于matplotlib+tkinter實(shí)現(xiàn)簡(jiǎn)單的繪圖系統(tǒng)

 更新時(shí)間:2023年08月08日 08:30:00   作者:微小冷  
在理解matplotlib嵌入到tkinter中的原理之后,就已經(jīng)具備了打造繪圖系統(tǒng)的技術(shù)基礎(chǔ),所以本文來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的繪圖系統(tǒng),感興趣的小伙伴小伙伴可以了解一下

繪圖系統(tǒng)系列:python將matplotlib嵌入到tkinter中的步驟詳解

封裝成類(lèi)

在理解matplotlib嵌入到tkinter中的原理之后,就已經(jīng)具備了打造繪圖系統(tǒng)的技術(shù)基礎(chǔ),接下來(lái)要做的,就是做一個(gè)較有可讀性的繪圖類(lèi),其實(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ù)會(huì)實(shí)現(xiàn)諸多功能;setFrmFig用于設(shè)置繪圖界面,其中self.fig就是繪圖窗口,后續(xù)若要畫(huà)圖,都要在這里設(shè)置坐標(biāo)軸。

布局

最簡(jiǎn)單的繪圖系統(tǒng),也至少需要三個(gè)部件,分別用于輸入x值、y值以及點(diǎn)擊繪圖按鈕,從而setFrmCtrl函數(shù)可以先寫(xiě)為下面的形式

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個(gè)frm,分別用于存放控制按鈕,設(shè)置x數(shù)據(jù)和y數(shù)據(jù)的模塊,這三個(gè)模塊的布局又分別設(shè)計(jì)了三個(gè)函數(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掉了,此時(shí)的布局結(jié)果如下,非常簡(jiǎn)單

實(shí)現(xiàn)繪圖功能

接下來(lái)就是最核心的功能,實(shí)現(xiàn)繪圖,主要包括兩個(gè)步驟,一是讀取x和y的值,二是用二者的值完成圖像的繪制。

簡(jiǎn)單起見(jiàn),這里用eval函數(shù)直接讀取python表達(dá)式,同時(shí)為了讓不熟悉Python的人也可以順利生成x序列,將np.linspace隱去。則xEntry和yEntry的讀取過(guò)程可寫(xiě)為

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)建一個(gè)坐標(biāo)軸,然后在坐標(biāo)軸上繪圖,區(qū)別是最后需要調(diào)用self.canvas中的引擎來(lái)完成圖像繪制

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)欄的這些工具都可以無(wú)縫使用,非常便捷。

到此這篇關(guān)于基于matplotlib+tkinter實(shí)現(xiàn)簡(jiǎn)單的繪圖系統(tǒng)的文章就介紹到這了,更多相關(guān)matplotlib tkinter繪圖系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 分享20個(gè)實(shí)用的Python?Excel自動(dòng)化腳本

    分享20個(gè)實(shí)用的Python?Excel自動(dòng)化腳本

    這篇文章主要介紹了20個(gè)實(shí)用的Python?Excel自動(dòng)化腳本,用于自動(dòng)化處理和分析Excel文件,提高工作效率,從批量填充單元格、設(shè)置行高與列寬到生成數(shù)據(jù)透視表和圖表,涵蓋了數(shù)據(jù)處理和分析的各個(gè)方面,需要的朋友可以參考下
    2025-02-02
  • Python使用內(nèi)置json模塊解析json格式數(shù)據(jù)的方法

    Python使用內(nèi)置json模塊解析json格式數(shù)據(jù)的方法

    這篇文章主要介紹了Python使用內(nèi)置json模塊解析json格式數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了Python使用內(nèi)置的json模塊實(shí)現(xiàn)json格式數(shù)據(jù)的解析、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-07-07
  • Python報(bào)錯(cuò)ValueError:?cannot?convert?float?NaN?to?integer的解決方法

    Python報(bào)錯(cuò)ValueError:?cannot?convert?float?NaN?to?intege

    在Python編程中,我們經(jīng)常需要處理各種數(shù)據(jù)類(lèi)型,包括浮點(diǎn)數(shù)和整數(shù),然而,有時(shí)候我們可能會(huì)遇到一些意外的情況,比如將一個(gè)包含NaN(Not?a?Number)的浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)時(shí),就會(huì)拋出錯(cuò)誤,本文將探討這個(gè)錯(cuò)誤的原因,并給出幾種可能的解決方案,需要的朋友可以參考下
    2024-09-09
  • Python 迭代,for...in遍歷,迭代原理與應(yīng)用示例

    Python 迭代,for...in遍歷,迭代原理與應(yīng)用示例

    這篇文章主要介紹了Python 迭代,for...in遍歷,迭代原理與應(yīng)用,結(jié)合實(shí)例形式分析了Python迭代與遍歷的相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Python實(shí)現(xiàn)一個(gè)列表分割成多個(gè)列表的四種示例

    Python實(shí)現(xiàn)一個(gè)列表分割成多個(gè)列表的四種示例

    本文主要介紹了Python實(shí)現(xiàn)一個(gè)列表分割成多個(gè)列表的四種示例,包括使用循環(huán)、切片操作、itertools.groupby()和numpy的array_split(),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Python打包文件夾的方法小結(jié)(zip,tar,tar.gz等)

    Python打包文件夾的方法小結(jié)(zip,tar,tar.gz等)

    這篇文章主要介紹了Python打包文件夾的方法,結(jié)合實(shí)例形式總結(jié)分析了Python打包成zip,tar,tar.gz等格式文件的操作技巧,需要的朋友可以參考下
    2016-09-09
  • python實(shí)現(xiàn)劃詞翻譯

    python實(shí)現(xiàn)劃詞翻譯

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)劃詞翻譯功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2012-07-07
  • Python使用turtle模塊繪制愛(ài)心圖案

    Python使用turtle模塊繪制愛(ài)心圖案

    這篇文章主要為大家詳細(xì)介紹了Python使用turtle模塊繪制愛(ài)心圖案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Python批量處理csv并保存過(guò)程解析

    Python批量處理csv并保存過(guò)程解析

    這篇文章主要介紹了Python批量處理csv并保存過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python的CGIHTTPServer交互實(shí)現(xiàn)詳解

    Python的CGIHTTPServer交互實(shí)現(xiàn)詳解

    本篇文章主要給大家詳細(xì)分析了Python的CGIHTTPServer交互實(shí)現(xiàn)過(guò)程以及相關(guān)代碼分享,有興趣的參考學(xué)習(xí)下。
    2018-02-02

最新評(píng)論