import tkinter as tk #from tkinter.filedialog import askopenfilename from PIL import Image, ImageTk def Clic(event): """ Gestion de l'événement Clic gauche """ global DETECTION_CLIC_SUR_OBJET,iid # position du pointeur de la souris X = event.x Y = event.y DepXY[0]=(int(X/Csize))*Csize+(Csize/2) DepXY[1]=(int(Y/Csize))*Csize+(Csize/2) print("Position du clic -> ",DepXY[0],DepXY[1]) # coordonnées de l'objet iid = canvas.find_withtag('current') #print(iid[0]) [xmin,ymin] = canvas.coords(iid[0]) #print("Objet -> ",iid[0]) DETECTION_CLIC_SUR_OBJET = True #canvas.itemconfigure(iid[0], state="hidden") def Drag(event): global iid """ Gestion de l'événement bouton gauche enfoncé """ X = event.x Y = event.y #print("Position du pointeur -> ",X,Y) if DETECTION_CLIC_SUR_OBJET == True: # limite de l'objet dans la zone graphique if XLargeur-Csize/2: X=Largeur-Csize/2 if YHauteur-Csize/2: Y=Hauteur-Csize/2 # mise à jour de la position de l'objet (drag) canvas.coords(iid,X,Y) def CentreObjetDansCase(event): global iid X = event.x Y = event.y CaseX=(int(X/Csize))*Csize+(Csize/2) CaseY=(int(Y/Csize))*Csize+(Csize/2) if CaseX==DepXY[0] and CaseY==DepXY[1]: # même case donc je remets à sa place canvas.coords(iid[0],DepXY[0],DepXY[1]) print("CaseArr",CaseX,CaseY,"CaseDep",DepXY[0],DepXY[1] ) return # et je sors FbId=canvas.find_overlapping(X,Y,X+5,Y+5) #retourne un tuple (ex: (5,100)) = id objet (dessous,dessus) print("$$$",FbId,iid) if FbId[0]==iid[0]: # (5,100) et (100,) donc 100 vient remplacer 5 et 5 va à la place de 100 OldId=FbId[1] else: OldId=FbId[0] #Oldid=(FbId[1] if FbId[0]==iid[0] else FbId[0]) # (5,100) et (100,) donc 100 vient remplacer 5 et 5 va à la place de 100 canvas.coords(OldId,DepXY[0],DepXY[1]) # intervertir vignette choisie et vignette cible print("CaseArr",CaseX,CaseY,"CaseDep",DepXY[0],DepXY[1] ) canvas.coords(iid[0],CaseX,CaseY) def puzzle(): #global Lcrop for j in range(10): for i in range(10): box = (i*Csize, j*Csize, Csize*(i+1), Csize*(j+1)) #print(box) region = imageFull.crop(box) #print(i*80,j*80) Lcrop[j*10+i] = ImageTk.PhotoImage(region) num=canvas.create_image(i*Csize+(Csize/2),j*Csize+(Csize/2), anchor = tk.CENTER, image=Lcrop[j*10+i],tag= "N"+str(i*j)) #print(num) DETECTION_CLIC_SUR_OBJET = False Largeur = 800 Hauteur = 800 Csize=Largeur/10 DepXY=[0,0] root = tk.Tk() imageFull = Image.open("closed.jpg") canvas = tk.Canvas(root, width = imageFull.size[0], height = imageFull.size[1]) Lcrop=[0]*100 puzzle() canvas.bind('',Clic) # évévement clic gauche (press) canvas.bind('',Drag) # événement bouton gauche enfoncé (hold down) canvas.bind('',CentreObjetDansCase) canvas.grid() root.mainloop()