Tkinter : créer une liste
KRO
-
KRO -
KRO -
Bonjour,
je suis débutante et je me lance dans la programmation d'un jeu. Plusieurs images y sont en mouvement, seulement voilà ce que donne le programme :
je suis débutante et je me lance dans la programmation d'un jeu. Plusieurs images y sont en mouvement, seulement voilà ce que donne le programme :
from tkinter import*
import os
from PIL import Image, ImageTk
def deplacement():
global dx, dy
if canvas.coords(W_image)[1]>400:
canvas.coords(W_image,180,0)
if canvas.coords(W_image1)[1]>400:
canvas.coords(W_image1,180,0)
if canvas.coords(W_image2)[1]>400:
canvas.coords(W_image2,180,0)
if canvas.coords(W_image3)[1]>400:
canvas.coords(W_image3,180,0)
if canvas.coords(W_image4)[1]>400:
canvas.coords(W_image4,180,0)
if canvas.coords(W_image5)[1]>400:
canvas.coords(W_image5,180,0)
if canvas.coords(W_image6)[1]>400:
canvas.coords(W_image6,300,0)
if canvas.coords(W_image7)[1]>400:
canvas.coords(W_image7,300,0)
if canvas.coords(W_image8)[1]>400:
canvas.coords(W_image8,300,0)
if canvas.coords(W_image9)[1]>400:
canvas.coords(W_image9,300,0)
if canvas.coords(W_image10)[1]>400:
canvas.coords(W_image10,300,0)
if canvas.coords(W_image11)[1]>400:
canvas.coords(W_image11,300,0)
canvas.move(W_image,dx,dy)
canvas.move(W_image1,dx,dy)
canvas.move(W_image2,dx,dy)
canvas.move(W_image3,dx,dy)
canvas.move(W_image4,dx,dy)
canvas.move(W_image5,dx,dy)
canvas.move(W_image6,dx,dy)
canvas.move(W_image7,dx,dy)
canvas.move(W_image8,dx,dy)
canvas.move(W_image9,dx,dy)
canvas.move(W_image10,dx,dy)
canvas.move(W_image11,dx,dy)
root.after(60,deplacement)
dx=0
dy=5
root = Tk()
#Chemin pour les images
script_dir = os.path.dirname(__file__)
rel_path = "/images/"
abs_file_path = script_dir + rel_path
image = Image.open(abs_file_path+"baptiste.png")
photobaptiste = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"clarys.png")
photoclarys = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"anais.png")
photoanais = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"allan.png")
photoallan = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"arnold.png")
photoarnold = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"thomas.png")
photothomas = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"ayoub.png")
photoayoub = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"caroline.png")
photocaroline = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"deborah.png")
photodeborah = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"louis.png")
photolouis = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"paul.png")
photopaul = ImageTk.PhotoImage(image)
image = Image.open(abs_file_path+"nono.png")
photonono = ImageTk.PhotoImage(image)
canvas=Canvas(root, width=500, height=400, bg='white')
canvas.pack(padx=10,pady=10)
#On cree le Widget image dans le canvas:
#NW=Nord West, le coin haut guche de l'image sera positionne a (10,10):
W_image=canvas.create_image(180,0,anchor=NW,image=photoclarys)
W_image1=canvas.create_image(180,50,anchor=NW,image=photobaptiste)
W_image2=canvas.create_image(180,120,anchor=NW,image=photoanais)
W_image3=canvas.create_image(180,190,anchor=NW,image=photoallan)
W_image4=canvas.create_image(180,250,anchor=NW,image=photoarnold)
W_image5=canvas.create_image(180,330,anchor=NW,image=photothomas)
W_image6=canvas.create_image(300,0,anchor=NW,image=photoayoub)
W_image7=canvas.create_image(300,50,anchor=NW,image=photocaroline)
W_image8=canvas.create_image(300,120,anchor=NW,image=photodeborah)
W_image9=canvas.create_image(300,190,anchor=NW,image=photolouis)
W_image10=canvas.create_image(300,250,anchor=NW,image=photopaul)
W_image11=canvas.create_image(300,330,anchor=NW,image=photonono)
deplacement()
root.mainloop() Je suis bien consciente que ce n'est ni facile à lire ni esthétique avec autant de lignes, c'est pour cela que j'aimerai tout regrouper grâce à une liste, mais je ne comprend pas trop comment faire. Si quelqu'un veut bien m'aider, merci d'avance.
A voir également:
- Tkinter : créer une liste
- Probleme tkinter injustifier - Forum Python
- Pygame ou tkinter ? - Forum Python
- Probleme collision avec tkinter - Forum Python
- Problème avec grid tkinter ✓ - Forum Python
- Tkinter canvas rotate - Forum Python
1 réponse
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour, probablement quelque chose du genre:
ainsi que:
for uneimage in liste_images :
if canvas.coords(uneimage)[1]>400 :
canvas.coords(uneimage,300,0)
canvas.move(uneimage,dx,dy)
ainsi que:
for nom in ["baptiste", "clarys", ... , "nono"] :
image = Image.open(abs_file_path + nom + ".png")
photo = ImageTk.PhotoImage(image)
liste_images.append(canvas.create_image(180,0,anchor=NW,image=photo))
from tkinter import* import os from PIL import Image, ImageTk #Chemin pour les images script_dir = os.path.dirname(__file__) rel_path = "/images/" abs_file_path = script_dir + rel_path for nom in ["baptiste", "clarys", "anais", "allan", "arnold", "thomas", "ayoub", "caroline", "deborah", "louis", "paul", "nono"] : image = Image.open(abs_file_path + nom + ".png") liste_images = ImageTk.PhotoImage(image) liste_images.append(canvas.create_image(180,0,anchor=NW,image=liste_images)) for uneimage in liste_images : if canvas.coords(uneimage)[1]>400 : canvas.coords(uneimage,300,0) canvas.move(uneimage,dx,dy) def deplacement(): global dx, dy if canvas.coords(W_image)[1]>400: canvas.coords(W_image,180,0) if canvas.coords(W_image1)[1]>400: canvas.coords(W_image1,180,0) if canvas.coords(W_image2)[1]>400: canvas.coords(W_image2,180,0) if canvas.coords(W_image3)[1]>400: canvas.coords(W_image3,180,0) if canvas.coords(W_image4)[1]>400: canvas.coords(W_image4,180,0) if canvas.coords(W_image5)[1]>400: canvas.coords(W_image5,180,0) if canvas.coords(W_image6)[1]>400: canvas.coords(W_image6,300,0) if canvas.coords(W_image7)[1]>400: canvas.coords(W_image7,300,0) if canvas.coords(W_image8)[1]>400: canvas.coords(W_image8,300,0) if canvas.coords(W_image9)[1]>400: canvas.coords(W_image9,300,0) if canvas.coords(W_image10)[1]>400: canvas.coords(W_image10,300,0) if canvas.coords(W_image11)[1]>400: canvas.coords(W_image11,300,0) canvas.move(W_image,dx,dy) canvas.move(W_image1,dx,dy) canvas.move(W_image2,dx,dy) canvas.move(W_image3,dx,dy) canvas.move(W_image4,dx,dy) canvas.move(W_image5,dx,dy) canvas.move(W_image6,dx,dy) canvas.move(W_image7,dx,dy) canvas.move(W_image8,dx,dy) canvas.move(W_image9,dx,dy) canvas.move(W_image10,dx,dy) canvas.move(W_image11,dx,dy) root.after(60,deplacement) dx=0 dy=5 root = Tk() canvas=Canvas(root, width=500, height=400, bg='white') canvas.pack(padx=10,pady=10) deplacement() root.mainloop()Voici mon code modifié et mon message d'erreur : RuntimeError: Too early to create image ; je ne comprend pas d'où vient le problème... merci de ton aide.tu dois aussi réfléchir où placer le code suggéré, quel code cela remplace.
je me demande si tu ne devrais pas commencer par utiliser des boucles et des listes avec des exercices plus simples.