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 :

Affichage d'une image .png [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2021
    Messages : 19
    Par défaut Affichage d'une image .png
    Bonjour,

    dans ce premier programme j'affiche correctement les 2 images dans deux Frames différentes.
    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
    from tkinter import *
    from PIL import ImageTk, Image 
    import requests , base64
    root=Tk()
    trame_1=LabelFrame(root,text='Prévisions 1 ',bg='white',\
                               labelanchor = NW,height=250,width=700)
    trame_1.grid()
    Label(trame_1,text='Texte dans la trame 1').grid(column=1)
    icon_url = ('http://openweathermap.org/img/wn/04d@4x.png')
    im = Image.open(requests.get(icon_url, stream=True).raw)
    ph_plus = ImageTk.PhotoImage(im)
    pic_label = Label(trame_1,image=ph_plus,bg='white')
    pic_label.grid(column=2)
     
    trame_2=LabelFrame(root,text='Prévisions 2 ',bg='white',\
                               labelanchor = NW,height=250,width=700)
    trame_2.grid()
    Label(trame_2,text='Texte dans la trame 2').grid(column=1)
    icon_url = ('http://openweathermap.org/img/wn/04d@4x.png')
    im = Image.open(requests.get(icon_url, stream=True).raw)
    ph_plus2 = ImageTk.PhotoImage(im)# le 2 de ph_plus fait la différence !!
    pic_label = Label(trame_2,image=ph_plus2,bg='white')
    pic_label.grid(column=2)
     
    root.mainloop()
    Je me suis dit que je pourrai optimiser ce bout de programme avec une boucle for :

    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
    from tkinter import *
    from PIL import ImageTk, Image 
    import requests , base64
    root=Tk()
    for i in range(1,3):
        trame_i=LabelFrame(root,text=('Prévisions '+str(i)),bg='white',\
                               labelanchor = NW,height=250,width=700)
        trame_i.grid()
        Label(trame_i,text='Texte dans la trame '+str(i)).grid(column=1)
        icon_url = ('http://openweathermap.org/img/wn/04d@4x.png')
        im = Image.open(requests.get(icon_url, stream=True).raw)
        ph_plus_i = ImageTk.PhotoImage(im)
        pic_label = Label(trame_i,image=ph_plus_i,bg='white')
        pic_label.grid(column=2)
     
     
    root.mainloop()
    Et là, l'icone ne saffiche que dans la deuxième trame!
    Pourtant j'ai bien deux images différentes en mémoire:
    im: <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=200x200 at 0x25389B12F10>
    pyimage1
    et
    im: <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=200x200 at 0x25389B12F70>
    pyimage2

    Où est mon erreur?
    Merci de votre aide

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Salut,

    Citation Envoyé par PLUB_85 Voir le message
    Où est mon erreur?
    Votre erreur est de penser qu'en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(1,3):
        trame_i=...
        ...
    le nom de la variable changera à chaque itération pour devenir trame_1, trame_2,.... alors que çà restera "trame_i".

    Là ou çà se complique c'est pour l'instruction ph_plus_i = ImageTk.PhotoImage(im). Pour les widgets, tkinter garde une référence pour nous simplifier la vie.

    Pour les PhotoImage, il faut garder la référence dans son code. Sinon à la deuxième itération, le ph_plus_i = ... va libérer l'objet. Il va être détruit et l'image ne sera pas affichée (sauf la dernière).

    Le bon réflexe à avoir lorsque vous avez la tentation d'écrire trame_i, ph_plus_i,... est de penser "listes" (ou dictionnaires) pour ajouter l'objet à la liste trames, à la liste ph_plus,...

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

  3. #3
    Membre actif
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2021
    Messages : 19
    Par défaut Cela fonctionne
    Bonsoir,
    je ne suis pas très à l'aise avec les dictionnaires, par contre cela fonctionne avec des listes.
    Je me suis fourvoyé bêtement
    Merci de votre aide
    Cordialement

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

Discussions similaires

  1. Affichage d'une image png sur un fond bmp
    Par hjr.hajer dans le forum SDL
    Réponses: 5
    Dernier message: 28/01/2014, 14h51
  2. Affichage d'une image PNG
    Par fomazou dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/07/2011, 14h12
  3. [ImageMagick] Affichage d'une image png
    Par JavaAcro dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 06/02/2006, 09h13
  4. [FLASH MX] Qualité d'affichage d'une image
    Par n_tony dans le forum Flash
    Réponses: 3
    Dernier message: 16/08/2004, 09h44
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 10h41

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