Affichage de plusieurs images dans un canvas

Résolu/Fermé
cvan85 Messages postés 54 Date d'inscription mardi 1 novembre 2011 Statut Membre Dernière intervention 7 juillet 2022 - 21 janv. 2021 à 16:15
cvan85 Messages postés 54 Date d'inscription mardi 1 novembre 2011 Statut Membre Dernière intervention 7 juillet 2022 - 22 janv. 2021 à 12:23
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
A voir également:

7 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 21 janv. 2021 à 16:53
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
cvan85 Messages postés 54 Date d'inscription mardi 1 novembre 2011 Statut Membre Dernière intervention 7 juillet 2022 1
21 janv. 2021 à 17:03
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 21 janv. 2021 à 17:24
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
cvan85 Messages postés 54 Date d'inscription mardi 1 novembre 2011 Statut Membre Dernière intervention 7 juillet 2022 1
21 janv. 2021 à 17:35
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cvan85 Messages postés 54 Date d'inscription mardi 1 novembre 2011 Statut Membre Dernière intervention 7 juillet 2022 1
21 janv. 2021 à 18:07
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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
22 janv. 2021 à 11:35
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
cvan85 Messages postés 54 Date d'inscription mardi 1 novembre 2011 Statut Membre Dernière intervention 7 juillet 2022 1
22 janv. 2021 à 12:23
Bonjour Phil,

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

Claude
0