Кнопка запуска / остановки анимации графика Tkinter - PullRequest
0 голосов
/ 05 мая 2020

Итак, анимация графика у меня работает нормально, однако она всегда работает в фоновом режиме, когда я запускаю GUI. Но я хочу, чтобы он запускался только тогда, когда я нажимаю кнопку «Пуск». Я проделал работу, которая просто безумно увеличивает интервал, и это вроде как работает, но я знаю, что это не исправление. И не знаю, как это сделать кнопкой.

class PageFive(tk.Frame):

def __init__(self, parent, controller):
    tk.Frame.__init__(self, parent)


    f = Figure(figsize=(5,4), dpi=100)
    a = f.add_subplot(111)


    def animate(i):
        c = app.cursor
        c.execute("SELECT time, windspeed FROM data")
        fetch = c.fetchall()

        Xaxes = [x for (x, y) in fetch]
        Yaxes = [y for (x, y) in fetch]


        pltYaxes = np.array(Yaxes)
        pltXaxes = np.array(Xaxes)

        a.clear()
        a.plot(pltXaxes,pltYaxes)


    back = tk.Button(self, text="back",height = 2, width = 13,command=lambda: controller.show_frame(PageTwo), bg='green', fg='white', font=('helvetica', 15, 'bold')) #
    back.pack()



    label = ttk.Label(self, text="Windspeed", font=LARGE_FONT)
    label.pack(pady=10,padx=10)

    canvas = FigureCanvasTkAgg(f, master=self)
    canvas.draw()
    canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

    toolbar = NavigationToolbar2Tk( canvas, self )
    toolbar.update()
    canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
    self.ani = animation.FuncAnimation(f,animate, interval=5000)

1 Ответ

0 голосов
/ 06 мая 2020

, поэтому я попробовал просто создать новое окно Tkinter, и, похоже, оно работает довольно хорошо. Итак, я только что создал новую функцию, которая в основном создает новый tkinter GUI. И я просто вызываю его с помощью одной из моих кнопок на оригинальном GUI. Поэтому, когда я уничтожаю / закрываю окно, он останавливает всю анимацию графика и фоновую работу

def graph_window():


    root = tk.Tk()
    root.wm_title("Graph window")

    f = Figure(figsize=(5,4), dpi=100)
    a = f.add_subplot(111)


    def animate(i):
        c = app.cursor
        c.execute("SELECT time, windspeed FROM data")
        fetch = c.fetchall()

        Xaxes = [x for (x, y) in fetch]
        Yaxes = [y for (x, y) in fetch]


        #test3 = np.array(test)
        pltYaxes = np.array(Yaxes)
        pltXaxes = np.array(Xaxes)

        a.clear()
        a.plot(pltXaxes,pltYaxes)

    canvas = FigureCanvasTkAgg(f, master=root)  # A tk.DrawingArea.
    canvas.draw()
    canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

    toolbar = NavigationToolbar2Tk(canvas, root)
    toolbar.update()
    canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)


    def _quit():
        root.quit()     # stops mainloop
        root.destroy()

    button = tk.Button(master=root, text="Quit", command=_quit)
    button.pack(side=tk.BOTTOM)
    root.ani = animation.FuncAnimation(f,animate, interval=5000)


    tk.mainloop()

, поэтому я могу просто вызвать эту функцию с исходным GUI, например:

AirVelocity = tk.Button(self, text="Air Velocity",command=graph_window) 

AirVelocity.grid(row = 4, column = 0)
...