2013-07-04 154 views
3

我想用matlablotlib的TkAgg後端進行一點實時繪圖。 Here,可以看出FigureCanvasTkAgg類自動實現了canvas.copy_from_bbox(ax.bbox)canvas.restore_region(background),這是使用blit()的先決條件,可以找到方法文檔hereblit in FigureCanvasTkAgg with matplotlib

因此,我想下面的代碼(靈感here源):

#calibration graph 
calib_frame = tk.LabelFrame(r_cont, text='probe angle calibration', padx=5, pady=5) 
calib_frame.grid(column=0, row=0, sticky='ns') 
fig = Figure(figsize=(2,2)) 
calib_plot = fig.add_subplot(111) 
axis = np.arange(0,100) 
s = np.sin(2*math.pi*axis) #static data for debugging 
calib_plot.plot(axis, s) 
calib_canvas = FigureCanvasTkAgg(fig, master=calib_frame) 
calib_canvas.blit() 
calib_canvas.show() 
calib_canvas.get_tk_widget().grid(column=0, row=0) 

不工作,因爲calib_canvas.blit()方法不正確執行(我認爲...)。我明白blit()是做什麼的,我想blit()座標軸的邊框,但我不明白如何實現它,我讀的參考沒有幫助。有人可以幫助我正確實施嗎?

錯誤,我從上面的代碼獲得:

>>> 

Traceback (most recent call last): 
File "C:\Python27\try.py", line 450, in <module> 
calib_canvas.blit(bbox=None) 
File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 353, in blit 
tkagg.blit(self._tkphoto, self.renderer._renderer, bbox=bbox, colormode=2) 
AttributeError: 'FigureCanvasTkAgg' object has no attribute 'renderer' 
>>> 

回答

2

我解決了這個錯誤,這是由於初始show()事件之前調用blit()。只需反轉兩行,錯誤消失。