在tkinter内更新活动图表,但不会运行更新功能一次或重复
问题描述:
OrbGuiClass使用两个静态烛台图创建一个tkinter gui。数据从csvs中提取,这就是为什么代码不会为你运行。第三个图表是我希望实现的顶层图表,它可以在画布,GUI等外部工作,但是GUI FuncAnimation不会运行。我已经看到了它在课堂外的例子,但这也不起作用。在tkinter内更新活动图表,但不会运行更新功能一次或重复
class OrbGuiClass:
def __init__(self,root):
self.root=root
self.frame1=tk.Frame(root)
self.day_data=[self.dt,self.o,self.h,self.l,self.c]
self.tenwty_four=[self.ddt,self.oo,self.hh,self.ll,self.cc]
self.create_canvas()
self.create_live_canvas()
self.frame1.grid(row=4,column=2)
def create_canvas(self):
self.fig=Figure(figsize=(8,4))
self.ax1=self.fig.add_subplot(121,title='24 Hour Chart')
self.ax2=self.fig.add_subplot(122,title='Day Chart')
candlestick2_ochl(self.ax1,self.oo[9:len(self.oo)],
self.hh[9:len(self.hh)],self.ll[9:len(self.ll)],
self.cc[9:len(self.cc)])
candlestick2_ochl(self.ax2,self.o,self.h,self.l,self.c)
self.canvas = FigureCanvasTkAgg(self.fig, master=root)
self.canvas.get_tk_widget().grid(row=1,column=0,
columnspan=2,rowspan=2,sticky="ne")
self.canvas.show()
def create_live_canvas(self):
toplevel = tk.Toplevel()
self.fig2=Figure(figsize=(4,4), dpi=100)
self.ax=self.fig2.add_subplot(111)
self.canvas2 = FigureCanvasTkAgg(self.fig2, toplevel)
self.canvas2.show()
self.canvas2.get_tk_widget().pack()
self.anim=animation.FuncAnimation
(self.fig2,self.update,frames=100,interval=25)
def update(self, dummy):
#get_data() is a web crawling function that returns OHLC values
O,H,L,C= get_data()
self.ax=plt.gca()
self.ax.clear()
self.ax.set_xlim([-.5,.5])
candlestick2_ohlc(self.ax,O,H,L,C,width=.2,
colorup='g',colordown='r',alpha=1.0)
root = tk.Tk()
app=OrbGuiClass(root)
root.mainloop()
答
唯一的工作,我身边能拿出来得到这个工作是在下面,然后创建使用类plt.figure(以上)的独立图形和运行FuncAnimation plt.show()。同样为了这个工作,你需要在程序的顶部包含toplevel = tk.Toplevel(),并且gui将显示在多个窗口中。所以现在我有一辆自行车录音,但我梦想着法拉利。啊现实。确保你把plt.figure()放在了我的位置,Toplevel()放在root = tk.Tk()和app = OrbGuiClass(root)下面,因为其他人会分开。
class OrbGuiClass:
def __init__(self,root):
def create_canvas(self):
self.fig=Figure(figsize=(8,4))
root = tk.Tk()
app=OrbGuiClass(root)
toplevel=tk.Toplevel()
fig2=plt.figure()
ax=fig2.add_subplot(111)
def update(dummy):
O,H,L,C= get_data()
ax=plt.gca()
ax.clear()
ax.set_xlim([-.5,.5])
candlestick2_ohlc(ax,O,H,L,C,width=.2,
colorup='g',colordown='r',alpha=1.0)
ani=animation.FuncAnimation(fig2,update,frames=100,interval=3000)
plt.show()
root.mainloop()
在为它设置动画之前,应该在GUI中放置并显示图形画布。现在,你有一些自行车零件,并且正在问如何制造法拉利。您的代码不会按原样运行,因此很难为您提供帮助。 –
看到代码,我不明白为什么它不应该像现在这样工作。因此问题本身并不十分清楚。因为代码也不是[mcve],所以不可能判断潜在的故障来源。为了留在图片中,您将您的福特带到没有车轮的车间,并询问问题是否与发动机有关。 – ImportanceOfBeingErnest
好吧我看到最小,完整和可验证的例子recs并将更新代码来重现问题。说得通。这是新的,请原谅。 –