IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Supprimer et recréer des objets "FuncAnimation" [Python 3.X]


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Par défaut Supprimer et recréer des objets "FuncAnimation"
    Bonjour à tous,

    Je développe un GUI à base de Tkinter pour mon application d'arrosage automatique/Station météo sur raspberry.

    Dans ce GUI, j'ai un widget "notebook" comportant 4 onglets. Dans chaque onglet, excepté le premier, je trace une courbe (eau, débit, pluie, pression etc.) avec matplotlib qu'y s'actualise avec funcanimation.
    Mon problème survient lorsque je souhaite optimiser le fonctionnement. En effet, il n'est pas utile que les courbes s'actualisent lorsque l'utilisateur n'est pas sur le bon onglet puisqu'il ne les voit pas.
    Mon idée est donc de détecter l'onglet sur lequel je suis, et de créer ou supprimer les objets funcanimation en fonction de l'onglet. En pratique, la suppression fonctionne mais la création, je n'y arrive pas..
    J'aurai donc besoin de vos lumières pour m'expliquer le pourquoi du comment et me dire si l'approche est bonne ou si il y a un moyen plus simple pour avoir le comportement souhaité.
    Ci-dessous un bout de code (figure, figuretemp, figurepluie sont déclarés plus haut dans le code

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    def animate_temp(i):
        global hour_tab, temperature_tab, humidite_tab
     
        axtemp.clear()
        ax2temp.clear()
        axtemp.plot(hour_tab, temperature_tab, 'r')
        axtemp.set_xlim(right = 60 , left = 0)
        axtemp.set_xlabel("Temps [minutes]")
        axtemp.set_ylabel("Température extérieure [°C]")
        axtemp.set_title("Température et humidité extérieure durant la dernière heure")
        ax2temp.set_ylabel('Humidité extérieure [%RH]')
        ax2temp.plot(hour_tab, humidite_tab, 'c')
        ax2temp.set_ylim(top = 100 , bottom = 0)
     
    def animate_pluie(i):
        global hour_tab, pluie_tab, pression_tab
        print("test")
        axpluie.clear()
        ax2pluie.clear()
        axpluie.plot(hour_tab, pluie_tab, 'r')
        axpluie.set_ylim(bottom = 0)
        axpluie.set_xlim(right = 60 , left = 0)
        axpluie.set_xlabel("Temps [minutes]")
        axpluie.set_ylabel("Hauteur de pluie [mm]")
        axpluie.set_title("Pluie tombée et pression extérieure durant la dernière heure")
        ax2pluie.set_ylabel('Pression atmosphérique [hpa]')
        ax2pluie.plot(hour_tab, pression_tab, 'c')
        ax2pluie.set_ylim(top = 1050 , bottom = 950)
     
    def animate(i):
        global eau_tab, hour_tab, debit_tab
     
        ax.clear()
        ax2.clear()
        ax.plot(hour_tab, eau_tab, 'c')
        ax.set_xlim(right = 60 , left = 0)
        ax.set_xlabel("Temps [minutes]")
        ax.set_ylabel("Volume d'eau consommé [litres]")
        ax.set_title("Eau consommée totale et débit durant la dernière heure")
        ax2.set_ylabel('Débit [l/min]')
        ax2.plot(hour_tab, debit_tab, 'r')
     
    def tab_changed(event): #Détecte le changement d'onglet
        global ani, ani2, ani3
        print(onglet.index(onglet.select()))
     
        if onglet.index(onglet.select()) == 0 : 
            print("test0")
            if 'ani' in globals(): del ani
            if 'ani2' in globals(): del ani2
            if 'ani3' in globals(): del ani3
        elif onglet.index(onglet.select()) == 1 : 
            print("test1")
            ani = animation.FuncAnimation(figure, animate, interval=10000)
        elif onglet.index(onglet.select()) == 2 : 
            print("test2")
            ani3 = animation.FuncAnimation(figurepluie, animate_pluie, interval=10000)
        elif onglet.index(onglet.select()) == 3 : 
            print("test3")
            ani2 = animation.FuncAnimation(figuretemp, animate_temp, interval=10000)
     
    onglet.bind("<<NotebookTabChanged>>",tab_changed)
    PS : Comme vous l'aurez deviné, je suis tout sauf un développeur chevronné

    Merci d'avance pour l'aide apporté
    Quentin

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Citation Envoyé par Quent4491 Voir le message
    Mon idée est donc de détecter l'onglet sur lequel je suis, et de créer ou supprimer les objets funcanimation en fonction de l'onglet. En pratique, la suppression fonctionne mais la création, je n'y arrive pas..
    J'aurai donc besoin de vos lumières pour m'expliquer le pourquoi du comment et me dire si l'approche est bonne ou si il y a un moyen plus simple pour avoir le comportement souhaité.
    Plutôt que de tout casser et essayer de reconstruire pourquoi ne pas vous poser la question de savoir s'il est possible (ou pas) de suspendre et reprendre une animation?

    Et ce faisant chercher un peu sur Internet ("animation.FuncAnimation" "start" "pause" "stop") ce qu'il se raconte sur le sujet et essayer...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Par défaut
    Merci.

    Effectivement, je n'ai pas bien cherché... my bad.
    ani.event_source.stop() / start() fonctionne parfaitement bien

    Mais c'est aussi car j'aurai souhaité sous certaines conditions pouvoir changer l'attribut "interval" et je n'ai pas trouvé de méthode pour y parvenir (setattr ou ani["interval"] ne fonctionnant pas...)
    Je me suis donc lancé dans la méthode bourrin : supprimer et recréer, qui n'a pas aboutit non plus.

    Quentin

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Citation Envoyé par Quent4491 Voir le message
    Je me suis donc lancé dans la méthode bourrin : supprimer et recréer, qui n'a pas aboutit non plus.
    mon moteur de recherche préféré me donne la solution en 5 s.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Par défaut
    Effectivement, merci google,

    ani.event_source.interval fonctionne parfaitement.

    Merci encore pour l'aide
    Quentin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/07/2014, 11h55
  2. Supprimer ou désactiver des objets dans le schéma AD
    Par Civodul4 dans le forum Windows Serveur
    Réponses: 17
    Dernier message: 30/10/2009, 14h26
  3. Supprimer une liste des objets
    Par Sun03 dans le forum JPA
    Réponses: 12
    Dernier message: 09/04/2008, 11h15
  4. [XML]Protection des doubles quotes
    Par DarkNagash dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 27/04/2006, 10h59
  5. [Tableaux] souci avec des simples quotes
    Par Jean Fi dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2006, 20h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo