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

Python Discussion :

Problème tkinter & matplotlib


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2021
    Messages : 3
    Par défaut Problème tkinter & matplotlib
    Bonjour,

    Avant d'envoyer ce message, j'ai regardé les différentes discussions qui existent déjà sur ce thème ainsi que la bibliothèque Matplotlib mais mes différents essais ne sont pas concluants depuis un moment.

    Mon problème est de base relativement simple : j'ai un graphique matplotlib que je souhaite insérer dans une fenêtre tkinter pour une mise en page plus sympathique.

    Voici ce que je voulais améliorer :

    Nom : 1.jpg
Affichages : 112
Taille : 300,8 Ko

    Ma tentative est la suivante :

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    try :
        from Tkinter import *
    except :
        from tkinter import *
     
    import matplotlib.pyplot as plt
     
    def menu_graphique():
        for widget in root.winfo_children(): 
            widget.destroy() 
        global OA
        global OAprime
        global AB
     
        titre_OA = Label(root, text="Veuillez rentrer la valeur de OA : ", font=("Comic sans MS", 20), background="#009DE0", foreground="#F8F41F")
        titre_OA.pack() 
     
        OA = Entry(root, justify='center', background="#D1D0CC") 
        OA.pack()
     
        titre_OAprime = Label(root, text="Veuillez rentrer la valeur de OA' : ", font=("Comic sans MS", 20), background="#009DE0", foreground="#F8F41F")
        titre_OAprime.pack() 
     
        OAprime = Entry(root, justify='center', background="#D1D0CC") 
        OAprime.pack(pady='20')
     
        titre_AB = Label(root, text="Veuillez rentrer la valeur de AB : ", font=("Comic sans MS", 20), background="#009DE0", foreground="#F8F41F")
        titre_AB.pack() 
     
        AB = Entry(root, justify='center', background="#D1D0CC") 
        AB.pack()
     
        bouton_valider = Button(root, text = "Valider", justify='center', width='20', height='1', foreground="#2113C0", background="#D1D0CC", activeforeground="#2113C0", activebackground="#848489", font=("Comic sans MS",15))
        bouton_valider.bind("<ButtonRelease-1>", graphique)
        bouton_valider.pack()
     
    def graphique(event) :
        plt.figure()
        plt.title("Schéma : Image d'un objet par une lentille")
        plt.xlabel("Δ") 
        plt.grid(True) 
        plt.plot([OA.get,OA.get], [0,AB.get], c="red", marker="^", lw="4",label="Objet AB") 
        plt.plot([OA.get,0], [0,0], c="blue",label="Distance OA") 
        plt.plot([0,OAprime.get], [0,0], c="blue",label="Distance OA'") 
        plt.plot([OAprime.get,OAprime.get], [0,(OAprime.get*AB.get)/(OA.get)], c="red", marker="v", lw="4",label="Image A'B'")
        plt.plot([-1/(1/OAprime.get-1/OA.get),1/(1/OAprime.get-1/OA.get)], [0,0], c="black")
        plt.plot([-1/(1/OAprime.get-1/OA.get),1/(1/OAprime.get-1/OA.get)], [0,0], "x", c="black", label="Distance focale") 
        plt.axvline(color="black", marker="^", lw="4")
        plt.legend() 
        plt.show
     
    def quitter():
        plt.close()
        fen.destroy()
     
    def main (): 
        for widget in root.winfo_children():
            widget.destroy()
     
        titre = Label(root, text="Les lentilles minces convergentes", font=("Comic sans MS", 20), background="#009DE0", foreground="#F8F41F")
        titre.pack() 
     
        titre_menu = Label(root, text="Menu : ", font=("Comic sans MS", 15), background="#009DE0")
        titre_menu.pack() 
     
        bouton_graphique = Button(root, text="Tracer le graphique", command=menu_graphique)
        bouton_graphique.pack()
     
        root.mainloop() 
     
    root = Tk() 
    root.geometry("1000x600") 
    root.title("Les lentilles minces convergentes") 
    root.config(background="#009DE0")
     
    main()
    Mais pour l'instant cela ne marche pas..
    Si qqn peut me mettre un peu sur la piste de mon (mes) erreur(s), je suis preneur.
    C'est mon premier message sur ce forum.

    Merci d'avance,
    Bonne journée!

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 044
    Par défaut
    Bonjour,

    Une première problématique, peut-être... comment ces deux interfaces fonctionnent ensemble ?

    Une solution ? https://matplotlib.org/3.1.0/gallery...tk_sgskip.html ou https://pythonprogramming.net/how-to...h-tkinter-gui/

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2021
    Messages : 3
    Par défaut
    J'avais déjà regardé ces exemples, le problème est qu'ils n'utilisent pas plt mais Figure, comment faire ?

    Citation Envoyé par fred1599 Voir le message
    Bonjour,

    Une première problématique, peut-être... comment ces deux interfaces fonctionnent ensemble ?

    Une solution ? https://matplotlib.org/3.1.0/gallery...tk_sgskip.html ou https://pythonprogramming.net/how-to...h-tkinter-gui/

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 044
    Par défaut
    La solution est malheureusement pas celle que vous attendrez
    https://stackoverflow.com/a/31453958/1125315

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par alexis_37 Voir le message
    J'avais déjà regardé ces exemples, le problème est qu'ils n'utilisent pas plt mais Figure, comment faire ?
    Il n'y a pas grand chose à changer, la méthode plot est accessible de plusieurs manières avec pyplot (plt) comme tu fais ou avec axes...

    Voici un exemple simple :

    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
    import tkinter as tk
    from matplotlib.backends.backend_tkagg import (
        FigureCanvasTkAgg, NavigationToolbar2Tk)
    from matplotlib.figure import Figure
    import numpy as np
    
    root = tk.Tk()
    root.columnconfigure(0, weight=1)
    root.rowconfigure(0, weight=1)
    
    fig = Figure()              # https://matplotlib.org/stable/api/figure_api.html
    ax = fig.add_subplot()      # https://matplotlib.org/stable/api/figure_api.html#matplotlib.figure.Figure.add_subplot 
    FigureCanvasTkAgg(fig, master= root)
    fig.canvas.get_tk_widget().grid(row=0, column=0, sticky="wens")
    
    def trace():
        t = np.arange(-30, 30, .01)
        ax.plot(t,  np.sin(t)/t)      # ici ax.plot à la place de plt.plot
        fig.canvas.draw()
    
    tk.Button(root, text="Trace courbe", font=("verdanna", 17, "bold"), command= trace).grid(row=1, column=0)
    root.mainloop()
    
    


    PS : Tu es vraiment lycéen ? Vous apprenez cela au lycée ?



  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2021
    Messages : 3
    Par défaut
    Bonsoir,

    Merci pour ton exemple, merci de ton aide !

    Oui en effet, je suis bien lycéen. C'est en spécialité NSI (numérique et sciences informatique), on a appris Python toute l'année (je suis parti d'absolument rien) et là on est sur les projets finaux

    Merci, bonne soirée!

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Ah ben c'est pas mal pour un lycéen, j'en connais parmi les étudiants qui ont du mal...

Discussions similaires

  1. [Python 3.X] Problèmes Tkinter sous 3.4.1 et autres
    Par Nennala dans le forum Général Python
    Réponses: 7
    Dernier message: 28/07/2014, 17h24
  2. Tkinter et Matplotlib
    Par LittleBN dans le forum GUI
    Réponses: 14
    Dernier message: 08/05/2014, 21h30
  3. problème de portabilité d'un programme avec tkinter et matplotlib
    Par rafoim dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 13/11/2013, 11h52
  4. problème d'histogramme matplotlib
    Par Luke spywoker dans le forum Calcul scientifique
    Réponses: 10
    Dernier message: 01/05/2011, 19h21
  5. problème avec Python, matplotlib et pygtk
    Par marwanos dans le forum Déploiement/Installation
    Réponses: 11
    Dernier message: 27/04/2010, 00h29

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