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 :

plot de Matplotlib sous Tkinter?


Sujet :

Tkinter Python

  1. #1
    Invité
    Invité(e)
    Par défaut plot de Matplotlib sous Tkinter?
    Bonjour!

    J'ai une question toute simple: j'aimerais savoir s'il y a un quelconque moyen d'insérer un plot Matplotlib dans une fenêtre Tkinter, peut-être sous forme de Canevas ou de fenêtre. J'ai Python 2.6 sous Linux.

    Merci à tous !

  2. #2
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Sous forme de fenêtre, ce n'est pas trop difficile. Il faut simplement ouvrir une fenêtre Tkinter avant la fenêtre matplotlib.

    A+

    Pfeuh

    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
    import matplotlib.pyplot as plt
    import random
    import Tkinter
    import sys
     
     
    def quitApp():
        plt.close()
        root.quit()
        sys.exit()
     
    def interrupt():
        counter.set(counter.get() + 1)
        root.after(300, interrupt)
     
    def addPlot():
        ax = plt.subplot(111)
        xdata = range(256)
        ydata = [random.randint(0,255) for counter in xdata]
        ax.plot(xdata, ydata)
        plt.show()
     
    root = Tkinter.Tk()
    Tkinter.Button(root, text='  ADD A PLOT  ', command=addPlot).grid()
    counter = Tkinter.IntVar()
    Tkinter.Label(root, textvariable=counter).grid()
    root.protocol('WM_DELETE_WINDOW', quitApp)
    root.after(0, interrupt)
    root.mainloop()

  3. #3
    Invité
    Invité(e)
    Par défaut
    oui, merci, je vois comment faire :-)

    Maintenant, je voudrais créer une entrée dans Tkinter qui pourrait influer sur le plot en question. Par exemple, mon plot est un sinus et la valeur que je tape dans le champ d'entrée est la nouvelle amplitude de ce sinus. Comment faut-il procéder?

    Merci de votre attention.

  4. #4
    Invité
    Invité(e)
    Par défaut
    en fait, j'ai trouvé tout seul. Il suffit de définir une action (par exemple print ex.get() ) qui puissent être invoquée chaque fois qu'on clique sur un bouton, comme dans ce petit programme illustratif que je viens de taper:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from Tkinter import *
     
    root=Tk()
    e=StringVar()
    ent=Entry(root,textvariable=e)
    def action():
    	print e.get(),type(e.get())
     
    b=Button(root,text='PRINT',command=action)
    b.pack()
    ent.pack()
     
    root.mainloop()
    cliquer sur le bouton fait un print du texte tapé dans le champ d'entrée.

    Et voilà! ;-P

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Je pose la question ici car j'ai un problème analogue: j'ai un graph matplotlib.pyplot.bar() qui doit apparaitre a l'écran suite a une pression de bouton Tkinter, mais le graph n'apparait seulement après la fermeture de l'application, destruction de la fentre principale.
    Pour illustrer:
    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
     
    from Tkinter import *
    import matplotlib.pyplot as plt
    from random import randint
    class Test() :
     
      def montre_graph(self) :
        self.a=[]
        self.b=[]
        i=0
        while i < 256 :
          self.a.append(randint(0,256))
          self.b.append(i)
          i += 1
     
        plt.bar(self.b, self.a)
        plt.show()
     
    test=Test()
    fen=Tk()
    bout= Button(fen, text='montre graph', command=test.montre_graph)
    bout_quit= Button(fen, text='quit n show', command= fen.destroy)
    bout.pack()
    bout_quit.pack()
    fen.mainloop()
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  6. #6
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Citation Envoyé par Luke spywoker Voir le message
    le graph n'apparait seulement après la fermeture de l'application, destruction de la fentre principale.
    Je viens d'essayer ton code sous python 2.7, et XP. Je l'ai lancé de l'éditeur scite, il marche très bien, le plot apparait dès le click du bouton. Par contre, il ne disparait pas quand on ferme la fenêtre principale, ni en cliquant la croix ni en cliquant le bouton quit. J'ai résolu en modifiant un protocol... Qui n'existe peut être que sous Windows...

    A+

    Pfeuh

    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
     
    from Tkinter import *
    import matplotlib.pyplot as plt
    from random import randint
     
    class Test() :
        def montre_graph(self) :
            self.a=[]
            self.b=[]
            i=0
            while i < 256 :
                self.a.append(randint(0,256))
                self.b.append(i)
                i += 1
            plt.bar(self.b, self.a)
            plt.show()
     
    def quitProperly():
        plt.close()
        fen.destroy()
     
    test=Test()
    fen=Tk()
    bout= Button(fen, text='montre graph', command=test.montre_graph)
    bout_quit= Button(fen, text='quit n show', command=quitProperly)
    bout.pack()
    bout_quit.pack()
    fen.protocol("WM_DELETE_WINDOW", quitProperly)
    fen.mainloop()

  7. #7
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Merci pour le discernement du problème entre plateformes mais je pense que c'est un problème de boucle principal, celle de Tkinter (mainloop()) a le dessus et celle de matplotlib se met en marche seulement après la fin de la boucle de Tkinter, les deux boucles ne pouvant pas fonctionner en meme temps.
    J'ai essayer la doc de matplotlib: pratique la fonction recherche dans le lecteur Adobe et je suis tomber sur deux méthodes que je n'arrive pas a implémenter et me demande si ca marcherai:
    matplotlib.backend_bases.FigureCanvasBase()
    dont 2 méthodes contienne loop :
    start_event_loop()
    &
    start_event_loop_default()
    Si quelqu'un a une soluce ou connait bien matplotlib merci de m'aider.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  8. #8
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    peut-être as-tu ce problème là?

    http://www.developpez.net/forums/d10...b/#post5631903

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

Discussions similaires

  1. plot and save sous matlab
    Par el-bey2 dans le forum MATLAB
    Réponses: 3
    Dernier message: 17/02/2011, 15h47
  2. Problème avec un décompte simple sous Tkinter
    Par bigboss560 dans le forum Tkinter
    Réponses: 2
    Dernier message: 21/02/2010, 13h10
  3. Dimensionnement fenetre sous Tkinter
    Par nabot dans le forum Tkinter
    Réponses: 3
    Dernier message: 19/10/2008, 17h18
  4. Réponses: 7
    Dernier message: 25/06/2007, 22h34
  5. formats images sous Tkinter
    Par bob29 dans le forum Tkinter
    Réponses: 2
    Dernier message: 05/02/2007, 14h17

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