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 :

Affichage d'un graphique sur tkinter


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 25
    Points : 12
    Points
    12
    Par défaut Affichage d'un graphique sur tkinter
    Bonjour,
    Je suis en train d'essayer de trouver un moyen d'afficher un graphique sur une fenêtre tkinter. Pour l'instant la courbe s'affiche dans la console. Mon objectif est de récupérer cette courbe qui s'affiche dans la console et de l'afficher dans mon interface graphique.
    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
     
        teta = np.linspace(0, 90, 40)
        tetai1 = np.deg2rad(teta)
        tetat1 = np.arcsin(n1/n2*np.sin(tetai1))
        rs1 = (n1*np.cos(tetai1)-n2*np.cos(tetat1)) / (n1*np.cos(tetai1)+n2*np.cos(tetat1))
        rp1 = (n2*np.cos(tetai1)-n1*np.cos(tetat1)) / (n1*np.cos(tetat1)+n2*np.cos(tetai1))
     
        Rs1 = np.abs(rs1)**2
        Rp1 = np.abs(rp1)**2
        Rm1 = 0.5*(Rs1+Rp1)
     
        plt.plot(teta, Rs1, label="Rs(teta)")
        plt.plot(teta, Rp1, label="Rp(teta)")
        plt.plot(teta, Rm1, label="Rm(teta)")
        plt.legend()
        plt.xlabel("Angle d'incidence teta (degres)")
        plt.ylabel("Réfléctance")
        plt.xlim(0, 90)
        plt.show()
    J'ai essayé cela pour l'afficher dans ma fenetre tkinter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    test = Label(fenetre, text=" ", fg='black')
    test.configure(text=plt.show())
    test.grid(row=1, column=3, padx=5, pady=5)
    Je pense que la fonction plt.show() est utilisée pour afficher le graphique uniquement dans la console. Est ce que vous connaissez un moyen d'afficher ce graph sur tkinter ? Merci

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

    Citation Envoyé par jaky33 Voir le message
    Je suis en train d'essayer de trouver un moyen d'afficher un graphique sur une fenêtre tkinter.
    Il faut commencer par lire la documentation de matplotlib qui donne des exemples.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    J'ai réussi à afficher l'exemple dans ma fenetre tkinter. Cependant le résultat s'affiche uniquement quand je lance la fenetre tkinter. Mon objectif est d'afficher la courbe lorsque je clic sur mon bouton "calcul". Pour cela j'ai modifié le code comme ceci (en créant def test()) :
    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
    import matplotlib as mpl
    import sys
    import numpy as np
    import tkinter as tk
    import matplotlib.backends.tkagg as tkagg
    from matplotlib.backends.backend_agg import FigureCanvasAgg
     
    fenetre = Tk()
     
    def draw_figure(canvas, figure, loc=(0, 0)):
        """ Draw a matplotlib figure onto a Tk canvas
     
        loc: location of top-left corner of figure on canvas in pixels.
        Inspired by matplotlib source: lib/matplotlib/backends/backend_tkagg.py
        """
        figure_canvas_agg = FigureCanvasAgg(figure)
        figure_canvas_agg.draw()
        figure_x, figure_y, figure_w, figure_h = figure.bbox.bounds
        figure_w, figure_h = int(figure_w), int(figure_h)
        photo = tk.PhotoImage(master=canvas, width=figure_w, height=figure_h)
     
        # Position: convert from top-left anchor to center anchor
        canvas.create_image(loc[0] + figure_w/2, loc[1] + figure_h/2, image=photo)
     
        # Unfortunately, there's no accessor for the pointer to the native renderer
        tkagg.blit(photo, figure_canvas_agg.get_renderer()._renderer, colormode=2)
     
        # Return a handle which contains a reference to the photo object
        # which must be kept live or else the picture disappears
        return photo
     
    def test():
        # Create a canvas
        w, h = 300, 200
        canvas = tk.Canvas(fenetre, width=w, height=h)
        canvas.grid(row=0, column=1, padx=5, pady=5)
     
        # Generate some example data
        X = np.linspace(0, 2 * np.pi, 50)
        Y = np.sin(X)
     
        # Create the figure we desire to add to an existing canvas
        fig = mpl.figure.Figure(figsize=(2, 1))
        ax = fig.add_axes([0, 0, 1, 1])
        ax.plot(X, Y)
     
        # Keep this handle alive, or else figure will disappear
        fig_x, fig_y = 100, 100
        fig_photo = draw_figure(canvas, fig, loc=(fig_x, fig_y))
        fig_w, fig_h = fig_photo.width(), fig_photo.height()
     
     
    bou1 = Button(fenetre, text='CALCUL',command = test)
    bou1.grid(row=0, column=0, padx=5, pady=5)
     
    fenetre.mainloop()
    J'ai bien le canvas qui s'affiche mais pas la courbe. Je ne comprends pas pourquoi cette courbe ne s'affiche pas quand je clic sur "calcul". Merci

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

    Le code que vous avez posté plante à la ligne 8: "fenetre = Tk()" donc il n'affiche pas de Canvas.
    De plus, il faut comprendre le commentaire "# Keep this handle alive, or else figure will disappear" et se souvenir que pousser des variables globales dans une fonction fait qu'elles disparaîtront à la sortie de celle-ci. Donc il y a des "global" à déclarer.

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

Discussions similaires

  1. Affichage graphique sur HP Unix
    Par yanis97 dans le forum Unix
    Réponses: 1
    Dernier message: 31/03/2009, 18h47
  2. Affichage d'un tableau sur console ou en mode graphique
    Par semah dans le forum Bibliothèque standard
    Réponses: 4
    Dernier message: 19/05/2008, 23h07
  3. affichage valeurs des abscisses sur graphique
    Par veer2006 dans le forum Excel
    Réponses: 3
    Dernier message: 01/08/2007, 09h46
  4. Affichage de plusieurs graphiques sur une même form
    Par redpulse dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/02/2007, 08h41
  5. Réponses: 7
    Dernier message: 28/04/2004, 16h51

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