Как очистить график графика в tkinter внутри кадра - PullRequest
0 голосов
/ 05 мая 2020

Здравствуйте, я пытаюсь научиться строить график в tkinter. У меня есть программа, которая читает 3 файла с тестовыми данными, а затем должна отображать их на экране. Я создал кнопку, чтобы очистить график в кадре, чтобы я мог использовать его снова, но я продолжаю получать сообщение об ошибке - tkinter.TclError: не может использовать пакет диспетчера геометрии внутри.! Labelframe2, который уже имеет подчиненные устройства, управляемые сеткой Итак, я не понимаю эту ошибку, поскольку не думал, что использую pack, я рисую свой график с помощью сетки - может ли кто-нибудь дать мне какое-то руководство, я включил код и файлы тестовых данных.

##test data files
Blue_Test.csv
Name1,Name2,Name3,Name4,Name5
1,10,19,1000,Blue
2,20,20,1001,Blue
3,30,21,1002,Blue
4,40,24,1005,Blue
5,60,25,1006,Blue
Green_Test.csv
Name1,Name2,Name3,Name4,Name5
1,10,19,1000,Green
2,40,24,1005,Green
3,60,25,1006,Green
4,20,20,1001,Green
5,30,21,1002,Green
Yellow_Test.csv
Name1,Name2,Name3,Name4,Name5
1,10,19,1000,Yellow
2,20,20,1001,Yellow
3,30,21,1002,Yellow
4,40,24,1005,Yellow
5,60,25,1006,Yellow
import tkinter

import numpy as np
# Implement the default Matplotlib key bindings.
from matplotlib.backend_bases import key_press_handler
from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figure
import matplotlib.pyplot as plt

my_window = tkinter.Tk()

current_list = ['Blue', 'Green', 'Yellow']

window_frame = tkinter.LabelFrame(my_window, height=800, width=600, text='window_frame', labelanchor='n', bd='4')
window_frame.grid(row=0, column=0, padx='10', pady='10')

graph_frame = tkinter.LabelFrame(my_window, height=600, width=600, text='graph_frame', labelanchor='n', bd='4')
graph_frame.grid(row=0, column=0, padx='10', pady='10')

fig = Figure(figsize=(2, 3), dpi=100)
ax = fig.add_subplot(111)

for item in current_list:
    x, y = np.loadtxt(item + '_' + 'Test.csv', skiprows=1, usecols=[2, 3],
                      unpack=True, delimiter=',')
    ax.plot(x, y)

canvas = FigureCanvasTkAgg(fig, master=graph_frame)  # A tk.DrawingArea
canvas.draw()
canvas.get_tk_widget().grid(row=1, column=0)
toolbar = NavigationToolbar2Tk(canvas, graph_frame)
toolbar.update()


def on_key_press(event):
    print("you pressed {}".format(event.key))
    key_press_handler(event, canvas, toolbar)

    canvas.mpl_connect("key_press_event", on_key_press)


def _quit():
    graph_frame.quit()  # stops mainloop
    graph_frame.destroy()  # this is necessary on Windows to prevent
    # Fatal Python Error: PyEval_RestoreThread: NULL tstate


button = tkinter.Button(master=window_frame, text="Quit", command=_quit)
button.grid(row=2, column=1)


def _clear():
    plt.clf()
    # Fatal Python Error: PyEval_RestoreThread: NULL tstate


button = tkinter.Button(master=window_frame, text="Quit", command=_clear)
button.grid(row=2, column=2)

window_frame.mainloop()
# If you put root.destroy() here, it will cause an error if the window is
# closed with the window manager.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...