Affichage de plusieurs images dans un canvas

Résolu
cvan85 Messages postés 59 Statut Membre -  
cvan85 Messages postés 59 Statut Membre -
Bonjour,

Je souhaite afficher 5 images les unes à côté des autres dans un canvas.
Les images se superposent au lieu d'être à la suite.
Ce doit être évident mais je n'arrive pas à voir ce qui cloche dans mon code.

Merci de votre coup de main.

Claude

#!/usr/bin/env python3.9
#######################
#                     #
#   New               #
#                     #
#######################

#import pdb; pdb.set_trace()
from tkinter import *
import random 
import os

####### Début du programme principal ############
fi_cart=os.listdir('/users/claude/PYTHON/data/cartes')
dico_c={}
for i in range(52):
    dico_c[i] = fi_cart[i]

fen1=Tk()
fen1.title("NP")
fen1.geometry("1000x1000")
can_gen=Canvas(fen1, width=950, height=950, bg ="#FEFEE2")
can_gen.place(x=30,y=30)
for i in range(5):
    ind=random.randint(1,52)
    carte=dico_c[ind-1]
    fich=('/users/claude/PYTHON/data/cartes/' + carte)
    print(fich)
    photo=PhotoImage(file=fich)
    pic=can_gen.create_image((40*(i+1))+(120*i),40, anchor='nw',image=photo)
    
####### Boucle d'attente d'évènements ##############
fen1.mainloop()

####### Effacement fenêtre - Sortie programme ######
fen1.destroy()
####################################################


Configuration: Macintosh / Safari 14.0.2

7 réponses

  1. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour Cvan85,

    Essaie ça:

    x_pos=(40*(i+1))+(120*i)
    print(x_pos)
    pic=can_gen.create_image(x_pos,40, anchor='nw',image=photo)


    pour voir si la position X de l'image évolue bien

    Une remarque: ceci ne sert à rien:
    ###### Effacement fenêtre - Sortie programme ######
    fen1.destroy()
    ####################################################
    
    0
  2. cvan85 Messages postés 59 Statut Membre 1
     
    Bonjour Phil,

    J'ai intégré tes lignes.
    X évolue bien (40, 200,360 ...) , mais je n'ai toujours que le dernier tirage à l'écran qui correspond à un abscisse de 600.

    Merci par ailleurs de ta remarque sur l'effacement de la fenêtre.

    Claude
    0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Tu as écrit :
    print(fich)


    Donc tu confirmes que le nom de l'image change aussi à chaque tour de boucle ?

    A mon avis, tu ne peux pas utiliser le nom photo pour chaque image

    Il faut que tu incrémente la variable photo à chaque tour de boucle, donc en utilisant l'indice i
    0
  4. cvan85 Messages postés 59 Statut Membre 1
     
    Oui, le print m'affiche bien des noms de fichiers images différents.
    Je regarde pour mettre en place ta préco et te fais un retour (et clos de post si ok)

    Merci
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cvan85 Messages postés 59 Statut Membre 1
     
    Impecable Phil,
    Suis passé par une liste pour générer des noms différents associés au paramètre "image = ..."
    J'ai bien mes 5 images qui s'affichent.

    Merci

    for i in range(5):
        ind=random.randint(1,52)
        carte=dico_c[ind-1]
        fich=('/users/claude/PYTHON/data/cartes/' + carte)
        print(fich)
        picture[i]=PhotoImage(file=fich)
        x_pos=(40*(i+1))+(120*i)
        print(x_pos)
        pic=can_gen.create_image(x_pos,40, anchor='nw',image=picture[i])
    0
  7. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    salut Cvans,

    Juste une remarque, pour faire plus 'pro' :-)

    Au lieu d'écrire 2 fois la chaine de caractères '/users/claude/PYTHON/data/cartes/'

    met la dans une variable que tu initialises en début de code

    Comme ça, si ca change, tu ne modifie qu'à un seul endroit ...
    0
  8. cvan85 Messages postés 59 Statut Membre 1
     
    Bonjour Phil,

    Merci du tuyau.
    Je l'applique.
    Bonne journée.

    Claude
    0