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 image dans une classe dérivée de Canvas


Sujet :

Tkinter Python

  1. #1
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut Afficher une image dans une classe dérivée de Canvas
    Bonjours à tous,

    J'essaye désespérément des dériver la class Canvas de Tkinter de sorte que le Canvas en question affiche une image donnée

    j'ai bien sure regardé ce post dans la FAQ : Comment insérer une image dans un Canvas ? que fonctionne à merveille, tel quel...

    ...Mais je n'arrive pas à l'intégrer dans ma classe dérivée DisplayWorld!!

    Ce code ne fonctionne pas :
    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
    from PIL import Image, ImageTk
    import  Tkinter as Tk
     
    class DisplayWorld(Tk.Canvas):
     
        def __init__(self, world):
            Tk.Canvas.__init__(self)
            self.configure( width=world.size[0], height=world.size[1] )
            photo = ImageTk.PhotoImage(world)
            self.create_image(0,0, anchor = Tk.NW, image=photo)        
     
     
    world_map = Image.open( 'map.jpg' )
    wind = DisplayWorld(world_map)
    wind.mainloop()
    Comment faire pour afficher l'image map.jpg en fond de mon DisplayWorld ?

    Merci

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut Je progresse mais c'est pas encore ça!!!
    Je renonce à dériver de Canvas, je dérive maintenat de Tk.
    Ce code m'affiche bien une fenêtre aux dimensions de mon image, mais l'image n'apparait toujours pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class DisplayWorld(Tk.Tk):
        def __init__(self):
            Tk.Tk.__init__(self)# constructeur de la classe parente
            # Image de fond
            image = Image.open( 'map.jpg' )
            photo = ImageTk.PhotoImage(image)
            self.can = Tk.Canvas(self, width = image.size[0], height = image.size[1])
            self.can.create_image(0,0, anchor = Tk.NW, image=photo)
            self.can.pack(side =Tk.LEFT)
     
    # Test code :
    if __name__ == '__main__':
        wind = DisplayWorld()
        wind.mainloop()
    Pourquoi l'image image n'apparait pas???

  3. #3
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut Ca marche!! Mais pourquoi?
    J'ai finalement réussi à faire un code qui fonctionne! Parcontre, je ne comprend pas pourquoi celui-ci marche et pas le précédent!!
    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
    from PIL import Image, ImageTk
    import  Tkinter as Tk
     
    class DisplayWorld(Tk.Tk):
     
        def __init__(self, world_map ):
            Tk.Tk.__init__(self)# constructeur de la classe parente
            self.map = world_map
            # Image de fond
            self.photo = ImageTk.PhotoImage(self.map)
            self.can = Tk.Canvas(self, width = self.map.size[0], height = self.map.size[1])
            self.can.pack(side =Tk.LEFT)
            # Dessine tout
            self.plot_all()
     
        def plot_all(self):
            self.can.delete(Tk.ALL)
            # Affiche image
            self.can.create_image(0,0, anchor = Tk.NW, image=self.photo)
     
     
    world_map = Image.open( 'map.jpg' )
    wind = DisplayWorld(world_map)
    wind.mainloop()
    Si quelqu'un a une explication...

    Merci

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Deux choses:
    Dans le premier code vous n'utilisez pas de gestionnaire de géométrie donc le Canvas n'est pas affiché.

    C'est fait dans le second
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            self.can.pack(side =Tk.LEFT)
    Mais avec ImageTk une référence à l'instance doit être stockée quelque part pour ne pas la perdre.

    C'est fait dans le troisième code avec self
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            self.photo = ImageTk.PhotoImage(self.map)
    Dans ce cas vous stockez photo dans l'instance et Tkinter la retrouve.
    Ce qui donne avec votre premier code
    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
    from PIL import Image, ImageTk
    import Tkinter as Tk
     
    class DisplayWorld(Tk.Canvas):
     
        def __init__(self, world):
            Tk.Canvas.__init__(self)
            self.configure(width=world.size[0], height=world.size[1])
            self.photo = ImageTk.PhotoImage(world)
            self.create_image(0, 0, anchor=Tk.NW, image=self.photo)
            self.pack()     
     
     
    world_map = Image.open('map.jpg')
    wind = DisplayWorld(world_map)
    wind.mainloop()
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    root = Tk.Tk()
    world_map = Image.open('map.jpg')
    wind = DisplayWorld(world_map)
    root.mainloop()
    @+
    Merci d'utiliser le forum pour les questions techniques.

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

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. Afficher une image d'une BD dans une page JSF
    Par kam81 dans le forum JSF
    Réponses: 4
    Dernier message: 06/09/2011, 21h51
  3. Afficher une image d'une DB dans une page web
    Par akaii dans le forum VB.NET
    Réponses: 1
    Dernier message: 09/03/2009, 10h56
  4. afficher la matrice d'une image dans une figure
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 15
    Dernier message: 04/12/2008, 15h20
  5. Afficher une image dans une cellule d'une gridview
    Par guigui11 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/09/2007, 10h18

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