2017-09-27 76 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()