Удалить данные с холста в tkinter - PullRequest
0 голосов
/ 30 марта 2020

как мне удалить данные с фигуры, когда они используются в tktinter через FigureCanvasTkAgg? Я попытался очистить рисунок с помощью cla, clf и удалить холст с помощью .delete, .clear. Мой код: (Если у вас есть какие-либо советы, как я могу улучшить свой код, дайте мне сейчас. Это мой первый проект в области кодирования)

import tkinter as tk
from tkinter import *
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

#createplot
fig_CDF = Figure(figsize = (6, 5), facecolor = "white")
axis_CDF = fig_CDF.add_subplot(111)

canvas_CDF = FigureCanvasTkAgg(fig_CDF, master = window_main)
canvas_CDF._tkcanvas.pack(side = tk.TOP, fill = tk.BOTH, expand = 1)
canvas_CDF.get_tk_widget().place(x=400,y=50)

#plotdata
axis_CDF.plot(datax, datay, label = "data",marker=".", linestyle = "")
canvas_CDF.draw()

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 30 марта 2020

В этом коде я добавил три кнопки, которые показывают три метода - всем им нужно canvas_CDF.draw() для перерисовки элемента в окне.

  • сначала заменяет данные в plot и удаляет точки на графике, но они по-прежнему показывают оси.

  • секунда очищает ось - поэтому она удаляет данные и устанавливает ось на 0..1

  • третья очищает фигуру - она ​​удаляет четную ось.

Первая версия требует

plot = axis_CDF.plot(...)

для доступа к данным.

Я использую random только для создания некоторых данных.


import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import random

# --- functions ---

def replace_data():
    datax = []
    datay = []

    #datax = range(10)
    #datay = [x/10 for x in random.sample(range(10), 10)]

    plot[0].set_data(datax, datay)
    canvas_CDF.draw()

def clear_axis():
    #axis_CDF.clear()
    axis_CDF.cla()

    canvas_CDF.draw()

def clear_figure():
    fig_CDF.clear()
    #fig_CDF.clf()

    canvas_CDF.draw()

# --- main ---

window_main = tk.Tk()

datax = range(10)
datay = [x/10 for x in random.sample(range(10), 10)]

# create plot
fig_CDF = Figure(figsize=(6, 5), facecolor="white")
axis_CDF = fig_CDF.add_subplot(111)

canvas_CDF = FigureCanvasTkAgg(fig_CDF, master=window_main)
canvas_CDF._tkcanvas.pack(side='top', fill='both', expand=True)
canvas_CDF.get_tk_widget().pack()

# plot data
plot = axis_CDF.plot(datax, datay, label="data", marker=".", linestyle="")
canvas_CDF.draw()

# buttons
b = tk.Button(window_main, text='Replace data', command=replace_data)
b.pack()

b = tk.Button(window_main, text='Clear axis', command=clear_axis)
b.pack()

b = tk.Button(window_main, text='Clear figure', command=clear_figure)
b.pack()

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