Невозможно очистить фигуру matplotlib с помощью пользовательской функции - PullRequest
0 голосов
/ 20 декабря 2018

Я новичок в Матплотлибе.В последнее время я практикую это и надеюсь создать приложение, похожее на фигуру Matlab.Тем не менее, пара проблем возникла на ранней стадии.Вот мой измененный и упрощенный код (без ущерба для моих намерений):

import tkinter as tk

import matplotlib.backends.backend_tkagg as tkagg
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure

class AppWindow(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.wm_title(self, 'Activity Labeling Tool')
        app_window = tk.Frame(self)
        app_window.grid(row = 0, column = 0, sticky = 'nsew')
        # app_window.pack(side = 'top', fill = 'both', expand = True)
        app_window.grid_rowconfigure(0, weight = 1)
        app_window.grid_columnconfigure(0, weight = 1)

        self.frames = {} 
        frame = MainPage(app_window, self)
        self.frames[MainPage] = frame
        frame.grid(row = 0, column = 0, sticky = "nsew")          
        self.show_frame(MainPage)

    def show_frame(self, cont):     
        frame = self.frames[cont]
        frame.tkraise() # raise the frame to the front

class MainPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        fig = Figure(figsize = (8, 4.5), dpi = 120)
        ax = fig.add_subplot(111)
        ax.plot([1,2,3,4,5,6,7,8,9],[2,1,1,1,1,1,1,1,2])

        canvas = tkagg.FigureCanvasTkAgg(fig, self)

        canvas.get_tk_widget().grid(row = 1, column = 0)
        canvas.draw()

        frame_toolbar = tk.Frame(self)
        frame_toolbar.grid(row = 3, sticky = tk.W)

        toolbar = tkagg.NavigationToolbar2Tk(canvas, frame_toolbar)
        toolbar.update()
        canvas._tkcanvas.grid(row = 1, column = 0)

        def load_csv():  
            ax.clear() # Want to clear the fig, but not activated here
            '''
            load file
            '''   
        btn_load_file = tk.Button(self, text = 'Load File', command = load_csv)
        btn_load_file.grid(row = 0, column = 0)

app = AppWindow()
app.mainloop()

Мое намерение - очистить рисунок перед импортом файла CSV, чтобы обеспечить чистоту графика.Однако метод .clear() не активируется должным образом при нажатии кнопки загрузки файла.

Я попытался передать ax в функцию load_csv, все еще получая тот же результат.И я почти уверен, что .clear() правильно работает вне def.Я что-то упускаю в аспекте Matplotlib или даже Python?

Спасибо за просмотр моего вопроса.Любое предложение будет оценено.Еще раз спасибо!

...