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 :

Masquer une courbe sur une figure avec tkinter


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Masquer une courbe sur une figure avec tkinter
    Bonjour à tous,

    Mon problème est le suivant :

    J'ai une figure avec un plot de deux courbes : exp et sin. J'aimerais afficher cette figure dans une fenêtre tkinter afin d'insérer un widget du type checkbutton qui permettrait d'afficher ou non la courbe du sinus.

    Je me suis rendu compte en cherchant que c'est un sujet très utile et pourtant mal renseigné, j'espère que cet exemple simple aidera du monde. J'en appelle à votre pédagogie, mes connaissances en programmation sont limitées.

    voici l'ébauche qui ne fonctionne pas :

    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
    import numpy as np
    import matplotlib.pyplot as plt
    from tkinter import *
    from matplotlib.figure import Figure
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    import matplotlib
    matplotlib.use('TkAgg')
     
    from numpy import arange, sin, pi
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
    # implement the default mpl key bindings
    from matplotlib.backend_bases import key_press_handler
     
     
    from matplotlib.figure import Figure
     
     
    class BuckysButtons:
        def __init__(self,master):
            frame = Frame(master)
            frame.pack()
     
            self.printButton = Checkbutton(frame, text="Sinus", command=self.plotsin)
            self.printButton.pack(side=LEFT)
     
            self.quitButton = Button(frame, text="Quit", command= frame.quit)
            self.quitButton.pack(side=LEFT)
     
        def plotsin(self):
            ax2 = ax1.twinx()
            s2 = np.sin(2 * np.pi * t)
            ax2.plot(t, s2, 'r.')
            ax2.set_ylabel('sin', color='r')
            ax2.tick_params('y', colors='r')
     
     
    root = Tk()
    b= BuckysButtons(root)
     
    fig=plt.figure()
    ax1=fig.add_subplot(111)
    t = np.arange(0.01, 10.0, 0.01)
    s1 = np.exp(t)
    ax1.plot(t, s1, 'b-')
    ax1.set_xlabel('time (s)')
    ax1.set_ylabel('exp', color='b')
    ax1.tick_params('y', colors='b')
     
    canvas = FigureCanvasTkAgg(fig, master=root)
    canvas.show()
    canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
     
    toolbar = NavigationToolbar2TkAgg(canvas, root)
    toolbar.update()
    canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
     
    root.mainloop()



    Merci beaucoup pour toute réponse constructive!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    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 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Salut,

    Citation Envoyé par Quoodoo Voir le message
    J'ai une figure avec un plot de deux courbes : exp et sin. J'aimerais afficher cette figure dans une fenêtre tkinter afin d'insérer un widget du type checkpoint qui permettrait d'afficher ou non la courbe du sinus.
    C'est quoi un widget de type checkpoint?

    - W

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    C'est quoi un widget de type checkpoint?

    - W
    Salut, pardon je voulais simplement dire checkbutton, j'ai rectifié.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    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 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Salut,

    Reprenez le début de l'exemple que vous avez recopié dans la documentation:
    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
    import numpy as np
    import matplotlib.pyplot as plt
     
    fig, ax1 = plt.subplots()
    t = np.arange(0.01, 10.0, 0.01)
    s1 = np.exp(t)
    ax1.plot(t, s1, 'b-')
    ax1.set_xlabel('time (s)')
    # Make the y-axis label, ticks and tick labels match the line color.
    ax1.set_ylabel('exp', color='b')
    ax1.tick_params('y', colors='b')
     
    #ax1.set_visible(False)
    ax2 = ax1.twinx()
    s2 = np.sin(2 * np.pi * t)
    ax2.plot(t, s2, 'r.')
    ax2.set_ylabel('sin', color='r')
    ax2.tick_params('y', colors='r')
     
    fig.tight_layout()
    Jusqu'ici on n'a rien dessiné (j'ai supprimé la dernière ligne plt.show()), on va le faire dans un Canvas tkinter et procéder au masquage en utilisant .set_visible.
    Ce qui ajoute ces quelques lignes:
    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
    ax2.set_visible(False) # on masque le 2nd tracé
     
    import tkinter as tk
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
     
    root = tk.Tk()
    canvas = FigureCanvasTkAgg(fig, master=root)
    canvas.show()
    canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
     
    def do_toggle():
        for a in ax1, ax2:
            a.set_visible(not a.get_visible())
        canvas.draw()
     
    tk.Button(root, text='toggle', command=do_toggle).pack()
    root.protocol("WM_DELETE_WINDOW", root.quit)
    tk.mainloop()
    La mécanique est assez simple à décortiquer et facile à comprendre.

    - W

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette aide très utile! J'ajoute aussi que si l'on veut les deux courbes sur le même graphique il suffit de retirer la boucle for

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 13h58
  2. couleur sur une partie d'une courbe avec Plot
    Par dz_robotix dans le forum R
    Réponses: 2
    Dernier message: 06/02/2013, 23h57
  3. probleme avec l'appui sur une touche sur une jframe ou jdialog
    Par jeanfeu dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 05/08/2008, 17h14
  4. Réponses: 1
    Dernier message: 25/12/2006, 17h03
  5. Réponses: 3
    Dernier message: 14/10/2005, 14h50

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