[python] cherche aide pour interface graphique

Fermé
benchoux - Modifié par Whismeril le 23/05/2015 à 23:15
 Utilisateur anonyme - 26 mai 2015 à 12:39
Bonjour,

J'ai un petit probleme, je n'arrive pas a trouver de solution :
Je voudrait créer comme un tableau avec les images de personnages, le probleme est que je ne sais pas vraiment comment faire pour mettre dans chaque canneva une image. Dans ce code l'image se repète 24 fois, j'aimerai qu'a la place, chaque canvas correspondrait a 1 image différente :)


fenetre = Tk()
fenetre.geometry("800x500")
photo = PhotoImage(file = 'python.gif')
photo1=PhotoImage(file='boy.gif')
photo2=.......    #etc pour mes 24 photos


for i in range(4):
    for j in range(5):
        canvas = Canvas(fenetre, width =130, height =130, bg ='white')
        canvas.create_image(65, 65, image =photo)
        canvas.grid(row=i, column=j)

fenetre.mainloop()




si quelqu'un aurai des idées se serai super sympa

EDIT: Correction de la coloration syntaxique.


A voir également:

2 réponses

Utilisateur anonyme
24 mai 2015 à 09:43
Salut,

La même image s'affiche à chaque fois car tu créés tes Canvas avec en paramètre de create_image, image = photo et photo regarde ce que c'est : photo = PhotoImage(file = 'python.gif'). Il s'agit effectivement de la même photo. Il faut que tu fasses varier le paramètre que tu passes à create_image dans image pour ne pas avoir la même chose.

Par exemple, tu pourrais stocker dans une liste photo, l'ensemble de toutes les photos que tu souhaites implémenter.

photo1 = PhotoImage(file = 'python.gif')
photo2 = PhotoImage(file = 'boy.gif')
photo3 = # ... etc pour tes 24 photos
photo = [photo1,photo2,photo3,...,photo24]


Après il te reste plus qu'à remplacer photo du paramètre image de create_image par photo[cpt] où cpt est un compteur qui s'incrémente jusqu'à 23 (car le dernier élément de la liste est le numéro 23 et non 24).
0
d'accord merci beaucoup pour ta réponse. Par contre pour cpt je n'est pas vraiment comprit, je doit remplacer cpt par quelque chose ?
0
Non, tu définies une variable cpt (qui vaut initialement 0) puis tu l'incrémente de 1 pour passer par toutes les photos. Il joue le même rôle que i ou j si tu veux
0
benchoux > Utilisateur anonyme
25 mai 2015 à 20:38
Je sais je ne suis pas doué du tout, mais ca ne fonctionne pas. peut etre que je n'ai pas ecrit la bonne chose, j'ai essayé de comprendre ce que c'était d'incrémenter mais j'ai encore un peu de mal.
Voila mon code, j'ai définit cpt :


photo0 = PhotoImage(file = 'belle.gif')
photo1 = PhotoImage(file = 'elsa.gif')
photo2 = PhotoImage(file = 'john.gif')
photo3 = PhotoImage(file = 'eric.gif')
photo4 = PhotoImage(file = 'peterpan.gif')
photo5 = PhotoImage(file = 'tarzan.gif')
photo=[photo0,photo1,photo2,photo3,photo4,photo5]


cpt=0

for i in range(4):
for j in range(6):
canvas = Canvas(fenetre, width =130, height =130, bg ='white')
canvas.create_image(65, 65, image =photo[cpt])
canvas.grid(row=0, column=0)

0
Utilisateur anonyme
26 mai 2015 à 12:39
Oui, c'est bien. Le problème c'est que ton compteur cpt vaut toujours 0. A aucun moment tu ne le fait changer de valeur. L'incrémentation d'une variable (ici cpt) c'est augmenter de 1 quand un tour de boucle est réalisé. Un exemple basique :

cpt = 0
while cpt<20: 
    print(cpt)
    cpt = cpt + 1 # ou cpt += 1


Exécute ce code pour comprendre l'incrémentation. Ici, il te manque juste l'étape : augmenter de 1 quand un tour de boucle est réalisé.
0