Я пытаюсь отобразить две обновляемые фигуры matplotlib в реальном времени на сетке tkinter, используя canvas '.
В настоящее время я пробовал код ниже, используя python 3.7 на spyder.
a = Figure(figsize=(10, 3))
plot_a = a.add_subplot(111)
plot_a.set_xlim([0, 2*np.pi])
plot_a.set_ylim([-1, 1])
lna, = plot_a.plot([], [], color='red', lw=5)
b = Figure(figsize=(10, 3))
plot_b = b.add_subplot(111)
plot_b.set_xlim([0, 2*np.pi])
plot_b.set_ylim([-1, 1])
lnb, = plot_b.plot([], [], color='olive', lw=5)
x = np.linspace(0, 2*np.pi, 1024)
def updateGraphsA(i):
lna.set_xdata(x)
lna.set_ydata(np.sin(x + i * np.pi / 10))
print('in A')
def updateGraphsB(i):
lnb.set_xdata(x)
lnb.set_ydata(np.sin(x - i * np.pi / 10))
print('in B')
class GUI(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "Placeholder")
canvasA = FigureCanvasTkAgg(a, self)
canvasA.draw()
canvasA.get_tk_widget().grid(
row=0, column=0, pady=2, padx=10, sticky='nsew')
canvasB = FigureCanvasTkAgg(b, self)
canvasB.draw()
canvasB.get_tk_widget().grid(
row=1, column=0, pady=2, padx=10, sticky='nsew')
app = GUI()
aniA = animation.FuncAnimation(a, updateGraphsA, interval=1000, blit=False)
aniB = animation.FuncAnimation(b, updateGraphsB, interval=1000, blit=False)
app.mainloop()
Я ожидаю, что это будет чередоваться между печатью "в a" и "в b" при обновлении обеих цифр в графическом интерфейсе. Тем не менее, он печатает только «в b» и только обновляет холст / график B
Если я закомментирую следующий код в классе для canvas B,
canvasB = FigureCanvasTkAgg(b, self)
canvasB.draw()
canvasB.get_tk_widget().grid(
row=1, column=0, pady=2, padx=10, sticky='nsew')
он распечатает "в" и обновит холст / график А, как и ожидалось. Как я могу это исправить, чтобы он обновлялся одновременно.