【问题标题】:any way to close an embed graph? -tkinter & matplotlib有什么方法可以关闭嵌入图? -tkinter 和 matplotlib
【发布时间】:2020-11-14 18:54:58
【问题描述】:

我已经尝试了我自己能想象到的一切,我对 tkinter 和 matplotlib 知之甚少,我不知道如何关闭我创建的嵌入图,这是代码

from matplotlib import pyplot as plt
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)  
import tkinter 

fig = Figure(figsize = (5, 5), dpi = 100)
plotf = fig.add_subplot(111)
window = tkinter.Tk()

def grafFertilidadeMulher():
    idadeM = [18,22,27,32,37,42,47,67,87,99] 
    fertilidadeRelativaM = [0.84,1,0.96,0.9,0.8,0.48,0.1,0.08,0.05,0.01] 

    plotf.plot(idadeM, fertilidadeRelativaM, linewidth='4', color='pink', marker='o', markerfacecolor='purple', markersize='8') 
    plotf.set_xlabel('idade') 
    plotf.set_ylabel('fertilidade relativa') 
    plotf.set_title('Perda de fertilidade com a idade')

    canvas = FigureCanvasTkAgg(fig, master = window)   
    canvas.draw() 
    canvas.get_tk_widget().pack()  

    toolbar = NavigationToolbar2Tk(canvas, window) 
    toolbar.update() 

    canvas.get_tk_widget().pack() 

def grafFertilidadeHomem():
    idadeH = [19,20,30,40,50,60,70,80,90,99]
    fertilidadeRelativaH = [0.92,1,1,1,0.95,0.81,0.6,0.4,0.4,0.4]

    plt.plot(idadeH, fertilidadeRelativaH, linewidth = '4', color = 'cyan', marker = 'o', markerfacecolor = 'blue', markersize = '8') 
    plt.ylim(0,1.2)
    plt.xlim(17,100)
    plt.xlabel('idade') 
    plt.ylabel('fertilidade relativa') 
    plt.title('Perda de fertilidade com a idade') 
    plt.show()

def grafFertilidadeAmbos():
    idadeM = [18,22,27,32,37,42,47,67,87,99] 
    fertilidadeRelativaM = [0.84,1,0.96,0.9,0.8,0.48,0.1,0.08,0.05,0.01]
    idadeH = [19,20,30,40,50,60,70,80,90,99]
    fertilidadeRelativaH = [0.92,1,1,1,0.95,0.81,0.6,0.4,0.4,0.4] 
    
    plt.plot(idadeM, fertilidadeRelativaM, linewidth='4', color='pink', marker='o', markerfacecolor = 'purple', markersize='8') 
    plt.plot(idadeH, fertilidadeRelativaH, linewidth = '4', color = 'cyan', marker = 'o', markerfacecolor = 'blue', markersize = '8') 
    plt.ylim(0,1.2)
    plt.xlim(17,100)
    plt.xlabel('idade') 
    plt.ylabel('fertilidade relativa') 
    plt.title('Perda de fertilidade com a idade') 
    plt.show()

btnFertilidadeMulher = tkinter.Button(window, text = 'Mulher', command = grafFertilidadeMulher)
btnFertilidadeAmbos = tkinter.Button(window, text = 'Ambos', command = grafFertilidadeAmbos)
btnFertilidadeHomem = tkinter.Button(window, text = 'Homem', command = grafFertilidadeHomem)
btnCloseFertilidade = tkinter.Button(window, text = 'fechar', command = plt.close(fig))

btnFertilidadeMulher.pack()
btnFertilidadeAmbos.pack()
btnFertilidadeHomem.pack()
btnCloseFertilidade.pack()

window.title('Menu')
window.geometry("500x500") 
window.mainloop()

不要介意奇怪的语言,这是我会为生物学开发的应用程序。

如果有人能帮我一把就好了

编辑:我只嵌入了其中一个图,我从使用 plt.show() 开始,后来才认为我应该嵌入

【问题讨论】:

  • 关闭它是什么意思?您可以像销毁任何其他 tkinter 对象一样销毁小部件:使用 destroy() 方法。

标签: python matplotlib tkinter


【解决方案1】:

我认为您并不真的想要关闭图表,您想要为下一个数据集清除它,对吧?在这种情况下,答案是使用fig.clear()。像这样:

from matplotlib import pyplot as plt
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
import tkinter

def grafFertilidadeMulher():
    fig.clear()
    plotf = fig.add_subplot(111)

    idadeM = [18,22,27,32,37,42,47,67,87,99]
    fertilidadeRelativaM = [0.84,1,0.96,0.9,0.8,0.48,0.1,0.08,0.05,0.01]

    plotf.plot(idadeM, fertilidadeRelativaM, linewidth='4', color='pink', marker='o', markerfacecolor='purple', markersize='8')
    plotf.set_xlabel('idade')
    plotf.set_ylabel('fertilidade relativa')
    plotf.set_title('Perda de fertilidade com a idade')
    canvas.draw()

def grafFertilidadeHomem():
    fig.clear()
    plotf = fig.add_subplot(111)

    idadeH = [19,20,30,40,50,60,70,80,90,99]
    fertilidadeRelativaH = [0.92,1,1,1,0.95,0.81,0.6,0.4,0.4,0.4]

    plotf.plot(idadeH, fertilidadeRelativaH, linewidth = '4', color = 'cyan', marker = 'o', markerfacecolor = 'blue', markersize = '8')
    plotf.set_ylim(0,1.2)
    plotf.set_xlim(17,100)
    plotf.set_xlabel('idade')
    plotf.set_ylabel('fertilidade relativa')
    plotf.set_title('Perda de fertilidade com a idade')
    canvas.draw()

def grafFertilidadeAmbos():
    fig.clear()
    plotf = fig.add_subplot(111)

    idadeM = [18,22,27,32,37,42,47,67,87,99]
    fertilidadeRelativaM = [0.84,1,0.96,0.9,0.8,0.48,0.1,0.08,0.05,0.01]
    idadeH = [19,20,30,40,50,60,70,80,90,99]
    fertilidadeRelativaH = [0.92,1,1,1,0.95,0.81,0.6,0.4,0.4,0.4]

    plotf.plot(idadeM, fertilidadeRelativaM, linewidth='4', color='pink', marker='o', markerfacecolor = 'purple', markersize='8')
    plotf.plot(idadeH, fertilidadeRelativaH, linewidth = '4', color = 'cyan', marker = 'o', markerfacecolor = 'blue', markersize = '8')
    plotf.set_ylim(0,1.2)
    plotf.set_xlim(17,100)
    plotf.set_xlabel('idade')
    plotf.set_ylabel('fertilidade relativa')
    plotf.set_title('Perda de fertilidade com a idade')

    canvas.draw()

def grafClear():
    fig.clear()
    plotf = fig.add_subplot(111)
    canvas.draw()

fig = Figure(figsize = (5, 5), dpi = 100)
plotf = fig.add_subplot(111)
window = tkinter.Tk()
canvas = FigureCanvasTkAgg(fig, master = window)
canvas.draw()
canvas.get_tk_widget().pack()
toolbar = NavigationToolbar2Tk(canvas, window)
toolbar.update()

btnFertilidadeMulher = tkinter.Button(window, text = 'Mulher', command = grafFertilidadeMulher)
btnFertilidadeAmbos = tkinter.Button(window, text = 'Ambos', command = grafFertilidadeAmbos)
btnFertilidadeHomem = tkinter.Button(window, text = 'Homem', command = grafFertilidadeHomem)
btnCloseFertilidade = tkinter.Button(window, text = 'fechar', command = grafClear)

btnFertilidadeMulher.pack()
btnFertilidadeAmbos.pack()
btnFertilidadeHomem.pack()
btnCloseFertilidade.pack()

window.title('Menu')
window.mainloop()

【讨论】:

  • 我确实打算将其全部清除,但我想它也可以这样工作。寻找这样做将成为我的下一个目标,谢谢您的帮助。如果这可行,我不明白为什么我会浪费时间尝试做某事而不改变一切。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
相关资源
最近更新 更多