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 :

Probleme pour afficher un graph dans une popUp [Python 2.X]


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Probleme pour afficher un graph dans une popUp
    Bonjour,

    Je suis entrain de finir une gui et j'essaye de plot un Bar graph dans une popUp a l'aide de d'un FigureCanvasTkAgg (Un canvas speciale pour matplotlib et l'objet Figure doc : http://matplotlib.org/api/figure_api.html ) Le code qui va suivre a ete inspire par le modele donne par matplotlib sur leur site : http://matplotlib.org/examples/user_...ing_in_tk.html

    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
     
    import Tkinter as tk
    from Tkinter import *
    from datetime import * 
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
    from matplotlib.figure import Figure
    import matplotlib.pylot as plt 
     
    class App(tk.Frame):
        def __init__(self, master):
            tk.Frame.__init__(self,master)
            self.master=master
     
            # Create a grid to place our widgets(=buttons,labels...)
            self.grid()
     
            self.buttonPlotPopUp = Button(master=self, text="Plot", command=self.pop_up)
            self.buttonPlotPopUp.grid(column=1)
     
     
        def pop_up(self):
            popUp= Toplevel()
            popUp.title("Plot")
            self.display_plot_in_pop_up()
     
        # theInput has a format : {8: 50870, 17: 115762, 34: 5686}
        # key are unique, don't change it.
        def plot_bar_graph(self):
            theInput={8: 50870, 17: 115762, 34: 5686}
            N = len(theInput) 
            ind = np.arange(N) 
            width = 0.4
            plt.bar(ind, theInput.values(), width, log=True)
            plt.ylabel('y')
            plt.xlabel('x')
            plt.xticks(ind+width/2., theInput.keys(), rotation=90)
            plt.grid()
            plt.show()        
     
        def display_plot_in_pop_up(self):
     
            f=Figure()
            plot=self.plot_bar_graph()
            graph=f.add_subplot(111)
            graph.plot
            canvas=FigureCanvasTkAgg(f)
            canvas.get_tk_widget().grid()
     
    root=tk.Tk()
    root.title('TelegrammSeeker')
    root.geometry('500x500')
    app=App(root)
    root.mainloop()
    Je ne comprends pas comment integrer mon plot au canvas et par la suite a la pop up.

    EDIT : CHangement d'import, et petite precision : je voudrais juste afficher mon bar graph dans ma GUI.

    Merci de m'avoir lu et merci d'avance pour vos conseils !

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Dans cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        def plot_bar_graph(self):
            '''...
            '''
            ...
            plt.bar(ind, theInput.values(), width, log=True)
            plt.ylabel('y')
            plt.xlabel('x')
            plt.xticks(ind+width/2., theInput.keys(), rotation=90)
            plt.grid()
            plt.show()
    qu'est-ce que plt ? Un objet importé avec * ?


    Ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        def display_plot_in_pop_up(self):
     
            f=Figure()
            plot=self.plot_bar_graph()  # plot_bar_graph() retourne None !
            graph=f.add_subplot(111)
            graph.plot                  # Quel rapport avec ce plot et celui 2 lignes plus haut ?
            canvas=FigureCanvasTkAgg(f)
            canvas.get_tk_widget().grid()
    Voir commentaires.
    Pas besoin de conserver de référence (avec self) pour garder le popup ouvert ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Dans cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        def plot_bar_graph(self):
            '''...
            '''
            ...
            plt.bar(ind, theInput.values(), width, log=True)
            plt.ylabel('y')
            plt.xlabel('x')
            plt.xticks(ind+width/2., theInput.keys(), rotation=90)
            plt.grid()
            plt.show()
    qu'est-ce que plt ? Un objet importé avec * ?
    J'ai modifie l'import, c'est un import de matplotlib.pylot, comme j'ai presaue 200 a 250 lignes de code sur ma gui j'ai allege un peu pour se focqliser sur le probleme.

    Ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        def display_plot_in_pop_up(self):
     
            f=Figure()
            plot=self.plot_bar_graph()  # plot_bar_graph() retourne None !
            graph=f.add_subplot(111)
            graph.plot                  # Quel rapport avec ce plot et celui 2 lignes plus haut ?
            canvas=FigureCanvasTkAgg(f)
            canvas.get_tk_widget().grid()
    Voir commentaires.
    Pas besoin de conserver de référence (avec self) pour garder le popup ouvert ?
    Je comprends pas comment utiliser un canvas pour juste afficher le plot que j'ai realise plus haut j'ai teste ca aussi :

    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
     
    def plot_bar_graph(self):       
            theInput={8: 50870, 17: 115762, 34: 5686}
            N = len(theInput) 
            ind = np.arange(N) 
            width = 0.4
            plot = plt.bar(ind, theInput.values(), width, log=True)
            plt.ylabel('y')
            plt.xlabel('x')
            plt.xticks(ind+width/2., theInput.keys(), rotation=90)
            plt.grid()
            plt.show()
     
            return plot
     
        def display_plot_in_pop_up(self):        
     
            plot=self.plot_bar_graph()               
            canvas=FigureCanvasTkAgg(plot)
            canvas.get_tk_widget().grid()
    En cherchant de plus en plus loin sur google pour trouver une solution, j'ai lu aue l'on pouvait sauvegarder son graph sous png et l'afficher apres je ne voudrais pas en arriver la :/

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Et qu'est-ce qui ne fonctionne pas ?

    Le popup ne s'affiche pas, il est vide, il s'affiche et se referme immédiatement, message d'erreur ??

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    J'ai trouvé une solution. J'utilisais Ipython pour "compiler" le programme mais c'est ce qui a créé le bug d'affichage. Sous Ipython on ne peut pas avoir le graph avec l'interface matplotlib, par contre sous idle 2,7 sa marche parfaitement bien.

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

Discussions similaires

  1. probleme pour afficher un graph
    Par superspike23 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 08/02/2008, 17h36
  2. Réponses: 2
    Dernier message: 13/12/2007, 14h53
  3. Réponses: 3
    Dernier message: 12/06/2007, 18h10
  4. Probleme pour afficher des printf dans le main
    Par Battosaiii dans le forum C
    Réponses: 4
    Dernier message: 13/03/2006, 10h58
  5. [JAR]Probleme pour inclure un jar dans une appli Web
    Par ouedmouss dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/12/2005, 09h40

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