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 :
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 :
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()
Quel serait la bonne approche à adopter ici ?NameError: name 'playing' is not defined
J
Partager