... | @@ -106,7 +106,7 @@ Après le plt.show(), la figure est tracée ; cependant, les actions sur les dif |
... | @@ -106,7 +106,7 @@ Après le plt.show(), la figure est tracée ; cependant, les actions sur les dif |
|
fig_pp.canvas.draw_idle()
|
|
fig_pp.canvas.draw_idle()
|
|
```
|
|
```
|
|
|
|
|
|
### définition des widgets et liaison avec une fonction
|
|
### définition des widgets et liaison avec une fonction par widget
|
|
|
|
|
|
Entre la définition de la figure et de ax et le show(), on définit ce qui se passe dans les 4 autres lignes de la grille, où l'on va placer les sliders.
|
|
Entre la définition de la figure et de ax et le show(), on définit ce qui se passe dans les 4 autres lignes de la grille, où l'on va placer les sliders.
|
|
On va d'abord enlever le cadre des vignettes du bas, avec ax.xaxis/yaxis.set_visible(False)
|
|
On va d'abord enlever le cadre des vignettes du bas, avec ax.xaxis/yaxis.set_visible(False)
|
... | @@ -161,11 +161,20 @@ chb_enT.on_clicked(switch_freq) |
... | @@ -161,11 +161,20 @@ chb_enT.on_clicked(switch_freq) |
|
|
|
|
|
```
|
|
```
|
|
|
|
|
|
### définition des fonctions associées aux widgets
|
|
### définition des fonctions associées aux widgets, version une par widget
|
|
|
|
|
|
|
|
Les fonctions liées à un widget ne peuvent prendre qu'un argument, imposé par le type du widget. Pour un slider, l'argument ne peut être que la valeur du curseur.
|
|
|
|
De plus, on relie le wid but widget à la fonction, donc sans parenthèses, on ne peut pas passer des arguments au moment de l'association !
|
|
|
|
|
|
|
|
si j'écrivais mon_widget.on_changed(ma_fonction(a=12, b= 5)) j'associerais le widget à ce que retourne la fonction avec a=12 et b=5, ce qui a peu de chances d'être une fonction...
|
|
|
|
|
|
|
|
Dans un premier temps, on va se débrouiller en définissant une fonction par widget, et en utilisant les variables globales dans les fonctions (mot-clef *global*)
|
|
|
|
|
|
*pour les sliders*
|
|
*pour les sliders*
|
|
Le slider_a (respectivement slider_b) récupère une valeur de a (resp. b) et la transmet en tant qu'argument *val* à la fonction qui lui a été liée, ici respectivement update_a et update_b.
|
|
Le slider_a (respectivement slider_b) récupère une valeur de a (resp. b) et la transmet en tant qu'argument *val* à la fonction qui lui a été liée, ici respectivement update_a et update_b.
|
|
|
|
|
|
Si on change a ou b, il suffit de retracer la fonction paramétrée par a et b, celle de Tchegodayev ne change pas. On va passer par des fonctions intermédiaires retracer_parametree et retracer_Tchego que l'on décrira dans la paragraphe suivant.
|
|
Si on change a ou b, il suffit de retracer la fonction paramétrée par a et b, celle de Tchegodayev ne change pas. On va passer par des fonctions intermédiaires retracer_parametree et retracer_Tchego que l'on décrira dans la paragraphe suivant.
|
|
|
|
|
|
Pour que l'on puisse changer la valeur de *a* pour tout le code, et pas seulement en tant qu'argument pour retracer_parametree(echantillon, a, b), on a choisi de préciser dans la fonction que l'on travaille avec la variable de niveau global:
|
|
Pour que l'on puisse changer la valeur de *a* pour tout le code, et pas seulement en tant qu'argument pour retracer_parametree(echantillon, a, b), on a choisi de préciser dans la fonction que l'on travaille avec la variable de niveau global:
|
|
global a # respectivement global b
|
|
global a # respectivement global b
|
|
Ainsi, quand on écrit ensuite a = val, on remplace donc la valeur pour tout le corps du programme ("main").
|
|
Ainsi, quand on écrit ensuite a = val, on remplace donc la valeur pour tout le corps du programme ("main").
|
... | @@ -209,6 +218,24 @@ def switch_freq(label): |
... | @@ -209,6 +218,24 @@ def switch_freq(label): |
|
retracer_Tchego(echantillon)
|
|
retracer_Tchego(echantillon)
|
|
|
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
### autre manière de définir des fonctions associées aux widgets, avec une fonction commune pour a et b
|
|
|
|
[ source utilisée ](http://www.math.buffalo.edu/~badzioch/MTH337/PT/PT-matplotlib_slider/PT-matplotlib_slider.html)
|
|
|
|
|
|
|
|
On voit bien que les fonctions update_a et update_b sont très proches.
|
|
|
|
On ne peut renvoyer qu'un argument, lié au widget cliqué, mais par contre il est facile de récupérer la valeur d'un slider, car il est aussi un argument : *mon_slider.val*
|
|
|
|
|
|
|
|
``` python
|
|
|
|
def update_a_ou_b(val):
|
|
|
|
|
|
|
|
retracer_parametree(echantillon, slider_a.val, slider_b.val)
|
|
|
|
|
|
|
|
```
|
|
|
|
Ainsi, on n'aurait plus qu'une fonction, que l'on lie à chacun des deux sliders.
|
|
|
|
Il faudrait ajuster d'autres parties du code pour se débarrasser des variables globales : l'initialisation, actuellement utile pour le premier tracé, devrait être enlevée, et pour le premier tracé il faudra que les sliders soit définis avant.
|
|
|
|
La fonction associée à l'update de N devrait elle aussi utiliser slider_a.val et slider_b.val au lieu de chercher a et b à l'extérieur de la fonction (ils ne devraient plus s'y trouver).
|
|
|
|
|
|
|
|
|
|
### définition des fonctions pour retracer les courbes, appelées par les fonctions associées aux widgets
|
|
### définition des fonctions pour retracer les courbes, appelées par les fonctions associées aux widgets
|
|
|
|
|
|
On a vu au-dessus que changer a ou b amène à retracer une seule des courbes, la même dans les deux cas, tandis que changer N ou le booleen en_periode_de_retour demande de retracer les deux.
|
|
On a vu au-dessus que changer a ou b amène à retracer une seule des courbes, la même dans les deux cas, tandis que changer N ou le booleen en_periode_de_retour demande de retracer les deux.
|
... | | ... | |