Skip to content
GitLab
    • Explore Projects Groups Topics Snippets
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • PYTHON - Atelier MatPlotLib PYTHON - Atelier MatPlotLib
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

La forge institutionnelle d'INRAE étant en production depuis le 10 juin 2025, nous vous invitons à y créer vos nouveaux projets.

  • Poulard Christine
  • PYTHON - Atelier MatPlotLibPYTHON - Atelier MatPlotLib
  • Wiki
  • Atelier_G_widgets

Atelier_G_widgets · Changes

Page history
Update Atelier_G_widgets authored 4 years ago by Poulard Christine's avatar Poulard Christine
Hide whitespace changes
Inline Side-by-side
Showing
with 29 additions and 2 deletions
+29 -2
Atelier_G_widgets.md
View page @ a4d7da98
...@@ -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.
......
Clone repository
  • AtelierB1_Graphiques_simples
  • AtelierB2_Lire_un_fichier
  • AtelierC
  • Atelier_D_carte
  • Atelier_D_carte_a_partir_de_fichiers_binaires
  • Atelier_E_longues_series
  • Atelier_G_widgets
  • Atelier_clic_afficher
  • Atelier_clics
  • Cartes focus sur le redimensionnement
  • GUI avec QT
  • La doc avec Sphinx
  • Lexique
  • Point Théorie Subplots
  • Pour les contributeurs
View All Pages

Menu

Explore Projects Groups Topics Snippets