Salut,

J'ai du mal à comprendre comment sont gérés les événements dans matplotlib. Je cherche à animer un graph après appuis sur un bouton "play". Mon graph contient un "silder" qui me permet de mettre à jour le contenu à la volée. J'ai défini mon bouton "play" de sorte à mettre à jour mon "slider" dans une boucle. Cette boucle parcours un ensemble de données. Or cet ensemble peut être assez conséquent et donc donner lieu à une longue animation. Je souhaite pouvoir la stopper à n'importe quel moment par l'appui sur un bouton "stop".

Voici le code en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
 
def display():
 
    fig, ax = plt.subplots()
    plt.subplots_adjust(bottom=0.2)
 
    # Création d'un bouton permettant de jouer automatiquement la cinématique
    ax_play = plt.axes([0.69, 0.025, 0.1, 0.04])
    ax_stop = plt.axes([0.80, 0.025, 0.1, 0.04])
    play_button = Button(ax_play, 'Play', hovercolor='0.975')
    stop_button = Button(ax_stop, 'Stop', hovercolor='0.975')
 
    playing = False
    stopping = False
 
    def play(event):
        global playing
        global stopping
        if not playing:
            playing = True
            for i in range(10):
                if not stopping:
                    #slider.set_val(i)
                    print(i)
                    plt.draw()
                    plt.pause(0.01)
                else:
                    continue
            playing, stopping = False, False
 
    def stop(event):
        global stopping
        stopping = True
 
    play_button.on_clicked(play)
    stop_button.on_clicked(stop)
 
    plt.show()    
 
display()
Lorsque je clique sur "play", la fonction du même nom est lancée avec en argument event. Les booléens playing et stopping sont inconnus de la fonction, même avec l'emploi de global :
NameError: name 'playing' is not defined
Quel serait la bonne approche à adopter ici ?

J