2017-09-06 202 views
0

我使用matplotlib中的animation.FuncAnimation來查看相機圖片。我使用python 3.6。是否有可能將函數附加到關閉事件?我的目標是: 如果我關上窗戶,我還想關閉相機。我只想關閉動畫的窗口,而不是整個python應用程序。做這個的最好方式是什麼?matplotlib動畫關閉事件

from Class.LiveView import LiveView 
from Class.PixelFormat import PixelFormat 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

class Viewer(object): 
    """show picture""" 
    def __init__ (self): 
     self.cap = LiveView() 
     self.cap.startcam() 
     self.cap.autoExposureTime() 

    def plotPicLive(self): 
     self.cap.startGetPic(PixelFormat.Mono8) 
     fig = plt.figure() 
     frame = self.cap.getPic() 
     fig.add_subplot(1,1,1) 
     im = plt.imshow(frame, animated=True) 
     def updatefig(*args): 
     frame = self.cap.getPic() 
     im.set_array(frame) 
     return im 
     ani = animation.FuncAnimation(fig,updatefig, interval=1) 
     plt.show() 

    def close(self): 
     self.cap.stopPic() 
     self.cap.close() 
     self.cap.cleanCam() 

這只是一個示例類。

謝謝你提前。

回答

0

Matplotlib有一個close_event。不幸的是,在event handling guide中沒有很好的記錄,但是有關於如何使用它的an example。要舉的例子:

from __future__ import print_function 
import matplotlib.pyplot as plt 


def handle_close(evt): 
    print('Closed Figure!') 

fig = plt.figure() 
fig.canvas.mpl_connect('close_event', handle_close) 

plt.text(0.35, 0.5, 'Close Me!', dict(size=30)) 
plt.show() 

在你的情況,這可以直接用作

 # ..... 

     ani = animation.FuncAnimation(fig,updatefig, interval=1) 
     fig.canvas.mpl_connect('close_event', self.close) 
     plt.show() 

    def close(self): 
     self.cap.stopPic() 
     self.cap.close() 
     self.cap.cleanCam() 
(即代碼的其他工作正常的假設下)