Есть ли способ вручную обновить графики Tkinter из другого файла?
У меня есть еще один файл, который должен непрерывно опрашиваться (в то время как True), поэтому я считаю, что у меня не может быть mainloop в графикахкласс, так как это заблокирует мой основной класс.Можно ли как-нибудь вызвать метод "plot_data" из этого другого файла и получить обновление графиков (a, b, c, d)?В настоящее время кадр зависает, а обновления в режиме реального времени не видны.
Однако, похоже, он обновляется в режиме реального времени, когда программа работает в режиме отладки.Есть ли причина, по которой поведение при выполнении отличается между RUN / DEBUG в Pycharm?
Ниже приведен вид класса Plots:
class Plots(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "GUI")
# TODO Make sure 'zoomed' state works on all laptops
self.state('zoomed') # Make fullscreen by default
container = tk.Frame(self, bg='blue')
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
frame = GraphPage(container)
self.page = GraphPage
frame.configure(background='black')
self.frame = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame() # Display frame on window
def show_frame(self):
frame = self.frame
frame.tkraise()
def plot_data(self):
# TODO Add exception handling for opening the file
file = open("../storage/data.csv", "r") # Open data file for plotting
t_list = ...
a_list = ...
v_list = ...
a2_list = ...
a.clear()
a.plot(time_list, t_list)
a.set_ylabel('T')
b.clear()
b.plot(time_list, a_list)
b.set_ylabel('A')
c.clear()
c.plot(time_list, v_list)
c.set_ylabel('V')
d.clear()
d.plot(time_list, a2_list)
d.set_xlabel('Time(s)')
d.set_ylabel('A')
class GraphPage(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
label = tk.Label(self, bg='red', text="GUI", font=LARGE_FONT, width=400)
label.pack(pady=10, padx=10)
canvas = FigureCanvasTkAgg(f, self)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
Другой файл по сути просто:
while(true):
plots.plot_data()