Уничтожение и повторное создание диаграммы matplotlib, реализованной с помощью FigureCanvasTkAgg - PullRequest
0 голосов
/ 31 января 2020

Я создаю программу Tkinter, в которой пользователь может ввести значение для создания затененной диаграммы Венна с помощью matplotlib-venn. Вот часть моего кода, в которой даются инструкции, когда после ввода формулы нажимается кнопка «Рассчитать», которая отображает диаграмму matplotlib на холсте в Tkinter.

def whenClicked():
    if str(selected.get()) == '3':
        plot1, v1 = configuration.createVenn3(formula.get())
        diagram = FigureCanvasTkAgg(plot1, master=window)
    if str(selected.get()) == '2':
        plot2, v2 = configuration.createVenn2(formula.get())
        diagram = FigureCanvasTkAgg(plot2, master=window)
    diagram.get_tk_widget().pack()
    diagram.draw()

Оператор if предназначен для определения количество кругов на диаграмме Венна, нужно ли составить матричную диаграмму в двухполюсной или трехкруговой системе матплотлиб-венна. Таким образом, в буквальном смысле порядок состоит в том, чтобы настроить plot и v, а затем определить диаграмму, которая является объектом canvas, и затем построить диаграмму на холсте Tkinter.

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

Есть идеи?

1 Ответ

0 голосов
/ 31 января 2020

Невозможно ответить на ваш вопрос с помощью некоторого кода без Минимального, Полного и Проверяемого примера , но в основном вам не следует воссоздавать новый Figure / FigureCanvasTkAgg каждый раз, когда вы что-то строите.

основная идея c заключается в том, что вы создаете Figure + FigureCanvasTkAgg один раз во время инициализации приложения и, вероятно, одновременно создаете оси на этой фигуре.

Тогда вам следует написать Ваша функция построения , чтобы она принимала оси в качестве параметра . Таким образом, в функции, которая обрабатывает нажатие кнопки, вы можете очистить содержимое осей ( Axes.cla () ) и нарисовать новую диаграмму в существующих осях, используя вашу функцию построения графика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...