2017-09-27 42 views
0

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() 
+0

在为它设置动画之前,应该在GUI中放置并显示图形画布。现在,你有一些自行车零件,并且正在问如何制造法拉利。您的代码不会按原样运行,因此很难为您提供帮助。 –

+0

看到代码,我不明白为什么它不应该像现在这样工作。因此问题本身并不十分清楚。因为代码也不是[mcve],所以不可能判断潜在的故障来源。为了留在图片中,您将您的福特带到没有车轮的车间,并询问问题是否与发动机有关。 – ImportanceOfBeingErnest

+0

好吧我看到最小,完整和可验证的例子recs并将更新代码来重现问题。说得通。这是新的,请原谅。 –

回答

0

唯一的工作,我身边能拿出来得到这个工作是在下面,然后创建使用类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()