簡體   English   中英

從窗口中刪除 matplotlib 繪圖/tkinter 畫布

[英]Deleting matplotlib plot /tkinter canvas from window

我想知道如何從 tkinter 窗口中完全刪除繪圖。

假設我會有一個像下面這樣的 tkinter 項目:

import tkinter as tk
from pandas import DataFrame
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

data1 = {'Country': ['US','CA','GER','UK','FR'],
         'GDP_Per_Capita': [45000,42000,52000,49000,47000]
        }
df1 = DataFrame(data1,columns=['Country','GDP_Per_Capita'])


root= tk.Tk() 
  
figure1 = plt.Figure(figsize=(6,5), dpi=100)
ax1 = figure1.add_subplot(111)
bar1 = FigureCanvasTkAgg(figure1, root)
bar1.get_tk_widget().pack(side=tk.LEFT, fill=tk.BOTH)
df1 = df1[['Country','GDP_Per_Capita']].groupby('Country').sum()
df1.plot(kind='bar', legend=True, ax=ax1)
ax1.set_title('Country Vs. GDP Per Capita')

def close_plot():
    plt.close(figure1)


button_delete = Button(root, text='Delete', command = lambda: close_plot()).place(height=30, width = 100, rely=0.02, relx = 0.4)


root.mainloop()

我一直試圖在按鈕內使用 matplotlib.pyplot.close 但它似乎不起作用。 任何人都知道如何擺脫這個陰謀。

非常感謝!

您的圖形嵌入在tkinter小部件中。 您需要保留對該小部件的引用,並使用其方法在pack_forget()窗口中添加/刪除它:這里我們使用pack_forget() :小部件從窗口中刪除,但仍然存在,並且可以稍后重用。

import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg


def remove_plot():
    w.pack_forget()   # here you remove the widget from the tk window
    # w.destroy()


if __name__ == '__main__':

    # data
    x, y = [1, 2, 3, 4], [1, 4, 9, 16]

    # matplotlib stuff
    figure1 = plt.Figure(figsize=(6, 5), dpi=100)
    ax1 = figure1.add_subplot(111)
    ax1.plot(x, y)
    ax1.set_title('Country Vs. GDP Per Capita')

    # tkinter stuff
    root = tk.Tk()

    bar1 = FigureCanvasTkAgg(figure1, root)
    w = bar1.get_tk_widget()
    w.pack(side=tk.LEFT, fill=tk.BOTH)   # here you insert the widget in the tk window
    button_delete = tk.Button(root, text='Remove Plot', command=remove_plot)
    button_delete.place(height=30, width=100, rely=0.02, relx=0.4)   # place is an odd choice of geometry manager, you will have to adjust it every time the title changes

    root.mainloop()

或者,如果您不再需要該圖,您可以使用w.destroy (注釋行)來銷毀小部件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM