Affichage de plusieurs images dans un canvas
Résolu
cvan85
Messages postés
59
Statut
Membre
-
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
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
-
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() ####################################################
-
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 -
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 -
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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]) -
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 ... -
Bonjour Phil,
Merci du tuyau.
Je l'applique.
Bonne journée.
Claude