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 :

Afficher une carte de chaleur matplotlib dans une fenetre tkinter


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2019
    Messages : 34
    Points : 15
    Points
    15
    Par défaut Afficher une carte de chaleur matplotlib dans une fenetre tkinter
    Bonjour, j'aimerais pour un projet afficher une carte de chaleur à l'intérieur d'une fenêtre tkinter.

    Bien que ce ne soit pas ce que je voulais, j'ai déjà réussis à afficher un graphe de matplotlib, en revanche je n'arrive pas à afficher la fenêtre de chaleur dans la fenêtre...
    Je n'arrive pas non plus à trouver d'explications sur internet expliquant comment gérer ce cas particulier.

    Serait-il possible d'avoir un lien/une explication/un code/une correction pour me permettre de comprendre comment résoudre mon problème ?
    Je précise (au cas où) que je programme en python 3.8 dans un environnement spyder.

    Le code que j'ai fait pour afficher le graphe et pour tenter d'afficher la carte de chaleur est ici :
    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
    import matplotlib
    matplotlib.use("TkAgg")
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    from matplotlib.figure import Figure
     
    import tkinter as tk
     
     
     
    class Principal(tk.Tk):
     
        def __init__(self):
            tk.Tk.__init__(self)  #faut pas faire attention, c'est juste pour simplifier
     
            container = tk.Frame(self)  #création du frame dans lequel devrait s'afficher la carte des chaleurs 
            container.pack(side="top",fill="both",expand=True)
     
            self.frame = Graphe(container) # test avec un graphe (classe Graphe)
            self.frame.grid(row=0,column=0,sticky="nsew")
            self.frame = Chaleur(container) #tentative d'afficher la carte de chaleur sur le frame
            self.frame.grid(row=0,column=0,sticky="nsew")
     
    #classe qui sert à rien, c'est juste pour tester
    class Graphe(tk.Frame):
     
        def __init__(self, parent):
            tk.Frame.__init__(self, parent)
            label = tk.Label(self, text="Graphe")
            label.pack(pady=10,padx=10)
     
            f = Figure(figsize=(8,5), dpi=100)
            a = f.add_subplot(111)
            a.plot([1,2,3,4,5,6,7,8],[5,6,1,3,8,9,3,5])
     
            canvas = FigureCanvasTkAgg(f, self)
            canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
     
    #classe pour afficher la carte de chaleur
    class Chaleur(tk.Frame):
        def __init__(self, parent):
            tk.Frame.__init__(self,parent) #initialisation du parent
            label = tk.Label(self,text="Carte de chaleur")
            label.pack(pady=10,padx=10)
     
            f = Figure(figsize=(5,5), dpi=90) 
            matTest = [[1,30,2,20],[4,100,35,15],[10,60,12,28]] #matrice juste pour tester
            c = f.add_subplot(111)                                             #pour paramétrer le positionnement de c dans f
            c = matplotlib.pyplot.imshow(matTest,cmap="hot")    #création de la carte de chaleur
     
            canvas = FigureCanvasTkAgg(f, self)  #affichage sur un canvas
            canvas.get_tk_widget().pack(side=tk.BOTTOM,fill=tk.BOTH,expand=True)
     
    #boucle principale
    appli = Principal()
    appli.mainloop()
    Merci d'avance !

  2. #2
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 881
    Points : 1 544
    Points
    1 544
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    de ce que je vois, ton souci provient de ton code matplotlib (classe Chaleur), pas de tkinter ...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2019
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Je ne suis pas certain de comprendre où se trouve l'erreur alors... Après tout, la fenêtre matplotlib affichant la carte de chaleur apparait bien et les valeurs des couleurs semblent correctes. Pour moi, l'erreur venait plutôt de la fonction add_subplot qui doit s'attendre à un objet plot et non à un objet imshow. C'est pour cela que je pensais qu'il fallait utiliser une autre fonction comme add_artist, mais c'est juste une intuition donc je n'ai aucune idée de si c'est bien le problème et je n'ai jamais réussi à faire marcher quoi que ce soit avec cette autre fonction add_artist.

Discussions similaires

  1. [Python 3.X] afficher une fenetre tkinter avant la fin du programme
    Par Anto5 dans le forum Programmation multimédia/Jeux
    Réponses: 3
    Dernier message: 16/04/2016, 11h47
  2. afficher une fenetre opengl dans un tform
    Par info_amel dans le forum C++Builder
    Réponses: 0
    Dernier message: 18/04/2008, 13h49
  3. Afficher une fenetre de programme dans 1 form
    Par zmatz dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/05/2007, 14h40
  4. afficher une fenetre dos dans une page jsp
    Par youp_db dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/10/2006, 17h02
  5. afficher une fenetre dans un panel
    Par adgabd dans le forum Delphi
    Réponses: 9
    Dernier message: 12/07/2006, 13h35

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