2017-09-06 3 views
0

Ich benutze die animation.FuncAnimation von matplotlib, um Kamerabilder anzusehen. Ich benutze Python 3.6. Gibt es eine Möglichkeit, eine Funktion an das Close-Event anzuhängen?matplotlib animation close event

Mein Ziel ist: Wenn ich das Fenster schließe, möchte ich auch die Kamera schließen. Ich möchte nur das Fenster der Animation nicht die gesamte Python-Anwendung schließen. Was ist der beste Weg, dies zu tun?

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

Dies ist nur eine Beispielklasse.

danke im voraus.

Antwort

0

Matplotlib hat eine close_event. Dies ist leider in der event handling guide nicht gut dokumentiert, aber es gibt an example zur Verwendung. Zitieren Sie das Beispiel:

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

In Ihrem Fall (unter der Annahme, dass der Rest des Codes funktioniert gut) diese direkt als

verwendet werden könnte
 # ..... 

     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() 
Verwandte Themen