2017-08-02 1 views
1

J'ai une liste de tableaux 2D que je tracasse en utilisant un curseur de matplotlib.
J'ai ajouté quelques boutons de contrôle à mon intrigue, donc je veux cliquer sur un bouton play, et l'intrigue change avec un certain intervalle de temps.
est ici la fonction qui est appelée par le bouton:Python - mise à jour de tracé basé sur un temporisateur

def play(mouse_event):  
    for x in range(len(listOfMoments)): 
     image.set_data(listOfMoments[x]) 
     time.sleep(0.5) 
     print(x) 

Le print(x) montre que x augmente normalement, cependant, il marque seulement le dernier tableau de la liste, après la fin incrément. Ma question est la suivante: comment puis-je la faire tracer une par une, comme prévu?

Je devrais aussi mentionner que j'ai essayé la boucle while et obtenu les mêmes résultats.

Répondre

1

Vous devez dire le back-end pour mettre à jour la figure après avoir changé les données à chaque fois dans la boucle:

fig.canvas.draw() 

Voici le documentation reference. Si vous ne disposez pas d'une référence à l'objet Figure, vous pouvez probablement le récupérer avec fig = plt.gcf().

+0

Ce qui manquait. J'ai juste ajouté 'fig.canvas.draw()' et cela a fonctionné. Merci beaucoup! – philippos

+0

Vous pouvez également utiliser une minuterie avec un rappel au lieu de veille afin de conserver l'interactivité pendant le délai. Voir https://matplotlib.org/examples/event_handling/timers.html –