Обновление питона tkinter / matplotlib без mainloop () - PullRequest
0 голосов
/ 28 февраля 2019

Есть ли способ вручную обновить графики 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...