Ouvrir une image en cliquant sur une image (Python-Tkinter)
Résolu/Fermé
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
-
8 avril 2020 à 17:11
MrLemon Messages postés 74 Date d'inscription mercredi 8 avril 2020 Statut Membre Dernière intervention 24 mai 2020 - 30 avril 2020 à 13:21
MrLemon Messages postés 74 Date d'inscription mercredi 8 avril 2020 Statut Membre Dernière intervention 24 mai 2020 - 30 avril 2020 à 13:21
Bonjour, j'ai un projet à réaliser en ISN pour le BAC, et je suis bloqué à une étape. Je dois créer une fenêtre dans laquelle plusieurs images sont disposées. Cette étape est déjà faite (voir screen)
Et maintenant, je dois de faire en sorte que ces images soient cliquables et qu'elles renvoient une nouvelle image. Je ne vois pas du tout comment faire ... Merci à tous ceux qui répondront et qui m'aiderons je l'espère.
Bonne journée à vous


Et maintenant, je dois de faire en sorte que ces images soient cliquables et qu'elles renvoient une nouvelle image. Je ne vois pas du tout comment faire ... Merci à tous ceux qui répondront et qui m'aiderons je l'espère.
Bonne journée à vous
A voir également:
- Afficher image tkinter
- Image iso - Guide
- Acronis true image - Télécharger - Sauvegarde
- Afficher mot de passe wifi android - Guide
- Image iso windows 10 - Guide
- Légender une image - Guide
35 réponses
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 19 avril 2020 à 17:11
Modifié le 19 avril 2020 à 17:11
Tu n'as pas beaucoup analysé mon code, et tu n'as pas beaucoup regardé la doc python !
Si je te fais tout le boulot, ca ne va pas beaucoup t'aider !
Pour ces trucs de +350+200, regarde la doc sur la création d'une fenêtre et de sa taille avec la méthode .geometry() et ses paramètres
can2 = Canvas(fenetre_2,bg='ivory',height=w_height-70,width=w_width-30), chez moi c'est sur la ligne 19, pas la 17
Tu sais bien ce qu'est un Canvas puisque tu en a fait toi-même, pour ce qui est de w_width et de w_height, je t'ai dit tout à l'heure:
"Déjà, lignes 25 et 26, 2 variables pour définir la taille de la fenêtre principale …"
donc je me sers de ces 2 variables pour régler aussi la taille de can2
Ensuite tu me dis :
"si j'ai bien compris, il faut ajouter image_3 = images [k][2] en dessous de
image_2 = images[k][1]"
Tu n'as pas suivi mes explications : je te dis qu'on fait une boucle pour parcourir tout le tableau, et éviter d'écrire 50 fois les affichages, il n'y a donc rien a ajouter !!!
A chaque tour de boucle, le nom de l'image et les coordonnées changent puisqu'on parcourt le tableau images qui est justement fait pour ça!
Evidemment, il faut aussi modifier le code comme je te le montrait pour faire une boucle à la place de la ligne 40 (affichage de toutes les images initiales)
Tu n'as jamais utilisé de boucles en Python ?
Fais toi un petit programme de test en mode console et essaie, et met des print pour voir ce qui se passe et ce qui sort, et essayer de comprendre
Pour ce qui est de compléter le dictionnaire images je te l'ai montré ici avec 2 éléments numérotés 0 et 1:
"Donc, le dictionnaire un peu plus complet commencerait comme ceci: ......."
Moi je serais toi je ferais aussi des tests sur les dictionnaires avec des print pour voir la logique pour en extraire les éléments:
images[k][0]
images[k][1]
images[k][2][0]
images[k][2][0]
Bref, relis bien toutes mes explications, essaie de comprendre, analyse le code, insère des print si il le faut pour mieux voir ce qui se passe
Si je te fais tout le boulot, ca ne va pas beaucoup t'aider !
Pour ces trucs de +350+200, regarde la doc sur la création d'une fenêtre et de sa taille avec la méthode .geometry() et ses paramètres
can2 = Canvas(fenetre_2,bg='ivory',height=w_height-70,width=w_width-30), chez moi c'est sur la ligne 19, pas la 17
Tu sais bien ce qu'est un Canvas puisque tu en a fait toi-même, pour ce qui est de w_width et de w_height, je t'ai dit tout à l'heure:
"Déjà, lignes 25 et 26, 2 variables pour définir la taille de la fenêtre principale …"
donc je me sers de ces 2 variables pour régler aussi la taille de can2
Ensuite tu me dis :
"si j'ai bien compris, il faut ajouter image_3 = images [k][2] en dessous de
image_2 = images[k][1]"
Tu n'as pas suivi mes explications : je te dis qu'on fait une boucle pour parcourir tout le tableau, et éviter d'écrire 50 fois les affichages, il n'y a donc rien a ajouter !!!
A chaque tour de boucle, le nom de l'image et les coordonnées changent puisqu'on parcourt le tableau images qui est justement fait pour ça!
Evidemment, il faut aussi modifier le code comme je te le montrait pour faire une boucle à la place de la ligne 40 (affichage de toutes les images initiales)
Tu n'as jamais utilisé de boucles en Python ?
Fais toi un petit programme de test en mode console et essaie, et met des print pour voir ce qui se passe et ce qui sort, et essayer de comprendre
Pour ce qui est de compléter le dictionnaire images je te l'ai montré ici avec 2 éléments numérotés 0 et 1:
"Donc, le dictionnaire un peu plus complet commencerait comme ceci: ......."
Moi je serais toi je ferais aussi des tests sur les dictionnaires avec des print pour voir la logique pour en extraire les éléments:
images[k][0]
images[k][1]
images[k][2][0]
images[k][2][0]
Bref, relis bien toutes mes explications, essaie de comprendre, analyse le code, insère des print si il le faut pour mieux voir ce qui se passe
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
Modifié le 19 avril 2020 à 18:03
Modifié le 19 avril 2020 à 18:03
J'essaie de bien tout comprendre mais c'est compliqué surtout que Python et moi ça fais 2 :?
Je vais voir ce que je peux faire tout seul en prenant plus le temps. Merci encore pour votre aide, seul ça serait treeeees compliqué :roll:
Bonne soirée à vous
Je vais voir ce que je peux faire tout seul en prenant plus le temps. Merci encore pour votre aide, seul ça serait treeeees compliqué :roll:
Bonne soirée à vous
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
27 avril 2020 à 10:54
27 avril 2020 à 10:54
Bonjour, j'ai réussis à terminer mon programme sans faire de boucle pour afficher les images.
J'ai essayé une boucle
mais elle affiche que la dernière image.
Sinon mon programme fonctionne sans boucle :
J'ai essayé une boucle
for i in range (len(images)): img = PhotoImage(file=images[i][0]) can.create_image(images[i][2][0],images[i][2][1],anchor = NW, image=img)
mais elle affiche que la dernière image.
Sinon mon programme fonctionne sans boucle :
from tkinter import * def pick_souris(event): global img_1 for k in range(len(images)): x1 = images[k][2][0] y1 = images[k][2][1] x2 = images[k][2][2] + x1 y2 = images[k][2][3] + y1 image_2 = images[k][1] if(event.x >=x1 and event.x <=x2 and event.y >=y1 and event.y <=y2): fenetre_2 = Toplevel(fenetre_princ) fenetre_2.geometry('1600x1200') can2 = Canvas(fenetre_2,bg='white',height=w_height-10,width=w_width-10) can2.place(x = 0,y = 0) img_1 = PhotoImage(file=image_2) can2.create_image(50,0,anchor = NW, image=img_1) w_width=1600 w_height = 1200 fenetre_princ = Tk() fenetre_princ.title("I Les conséquences de nos actes") fenetre_princ.geometry(str(w_width)+'x'+str(w_height)) can = Canvas(fenetre_princ,bg='#a1ffa3',height=w_height-10,width=w_width-10) can.place(x = 0,y = 0) can.bind("<Button-1>", pick_souris) #Image initiale: taille = 250x150 images = {0:('Fresque_01.png','Fresque_02.png',(50,0,250,150)),1:('Fresque_03.png','Fresque_04.png',(580,0,250,150)), 2:('Fresque_05.png','Fresque_06.png',(0,160,250,150)),3:('Fresque_07.png','Fresque_08.png',(50,320,250,150)), 4:('Fresque_09.png','Fresque_10.png',(50,650,250,150)),5:('Fresque_11.png','Fresque_12.png',(315,0,250,150)), 6:('Fresque_13.png','Fresque_14.png',(840,0,250,150)),7:('Fresque_15.png','Fresque_16.png',(400,320,250,150)), 8:('Fresque_17.png','Fresque_18.png',(0,480,250,150)),9:('Fresque_19.png','Fresque_20.png',(360,160,250,150)), 10:('Fresque_21.png','Fresque_22.png',(400,650,250,150)),11:('Fresque_23.png','Fresque_24.png',(1100,0,250,150)), 12:('Fresque_25.png','Fresque_26.png',(1100,320,250,150)),13:('Fresque_27.png','Fresque_28.png',(360,480,250,150)), 14:('Fresque_29.png','Fresque_30.png',(710,480,250,150)),15:('Fresque_31.png','Fresque_32.png',(1100,650,250,150)), 16:('Fresque_33.png','Fresque_34.png',(1050,160,250,150)),17:('Fresque_35.png','Fresque_36.png',(750,320,250,150)), 18:('Fresque_37.png','Fresque_38.png',(710,160,250,150)),19:('Fresque_39.png','Fresque_40.png',(1050,480,250,150)), 20:('Fresque_41.png','Fresque_42.png',(750,650,250,150))} #for i in range (len(images)): img = PhotoImage(file=images[0][0]) can.create_image(images[0][2][0],images[0][2][1],anchor = NW, image=img) img1 = PhotoImage(file=images[1][0]) can.create_image(images[1][2][0],images[1][2][1],anchor = NW, image=img1) img2 = PhotoImage(file=images[2][0]) can.create_image(images[2][2][0],images[2][2][1],anchor = NW, image=img2) img3 = PhotoImage(file=images[3][0]) can.create_image(images[3][2][0],images[3][2][1],anchor = NW, image=img3) img4 = PhotoImage(file=images[4][0]) can.create_image(images[4][2][0],images[4][2][1],anchor = NW, image=img4) img5 = PhotoImage(file=images[5][0]) can.create_image(images[5][2][0],images[5][2][1],anchor = NW, image=img5) img6 = PhotoImage(file=images[6][0]) can.create_image(images[6][2][0],images[6][2][1],anchor = NW, image=img6) img7 = PhotoImage(file=images[7][0]) can.create_image(images[7][2][0],images[7][2][1],anchor = NW, image=img7) img8 = PhotoImage(file=images[8][0]) can.create_image(images[8][2][0],images[8][2][1],anchor = NW, image=img8) img9 = PhotoImage(file=images[9][0]) can.create_image(images[9][2][0],images[9][2][1],anchor = NW, image=img9) img10 = PhotoImage(file=images[10][0]) can.create_image(images[10][2][0],images[10][2][1],anchor = NW, image=img10) img11= PhotoImage(file=images[11][0]) can.create_image(images[11][2][0],images[11][2][1],anchor = NW, image=img11) img12 = PhotoImage(file=images[12][0]) can.create_image(images[12][2][0],images[12][2][1],anchor = NW, image=img12) img13 = PhotoImage(file=images[13][0]) can.create_image(images[13][2][0],images[13][2][1],anchor = NW, image=img13) img14 = PhotoImage(file=images[14][0]) can.create_image(images[14][2][0],images[14][2][1],anchor = NW, image=img14) img15 = PhotoImage(file=images[15][0]) can.create_image(images[15][2][0],images[15][2][1],anchor = NW, image=img15) img16 = PhotoImage(file=images[16][0]) can.create_image(images[16][2][0],images[16][2][1],anchor = NW, image=img16) img17 = PhotoImage(file=images[17][0]) can.create_image(images[17][2][0],images[17][2][1],anchor = NW, image=img17) img18 = PhotoImage(file=images[18][0]) can.create_image(images[18][2][0],images[18][2][1],anchor = NW, image=img18) img19 = PhotoImage(file=images[19][0]) can.create_image(images[19][2][0],images[19][2][1],anchor = NW, image=img19) img20 = PhotoImage(file=images[20][0]) can.create_image(images[20][2][0],images[20][2][1],anchor = NW, image=img20) fenetre_princ.mainloop()
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
27 avril 2020 à 13:52
27 avril 2020 à 13:52
Holà MrLemon,
Je sais bien que tu fais avec tes connaissances :-)
Donc, justement, suis bien ce que je te racontes !
Dans ma réponse du 19 avril à 15h09 , je te disais:
"J'aurais donc pu écrire la ligne 40 comme ceci: "
On voit bien que les 2 dernières lignes sont décalées, donc à l'intérieur de la boucle
Et toi, tu écris:
Tout est aligné, donc la 1ere ligne, c'est une boucle qui tourne 20 fois et ne fait rien, et à la fin, le compteur i=19
Ensuite, on créé une image images[i][0], donc images[19][0] et on l'affiche
On n'affiche donc que la 19eme et dernière image ...
Je sais bien que tu fais avec tes connaissances :-)
Donc, justement, suis bien ce que je te racontes !
Dans ma réponse du 19 avril à 15h09 , je te disais:
"J'aurais donc pu écrire la ligne 40 comme ceci: "
for k in range(len(images)): img = PhotoImage(file=images[k][0]) can.create_image(images[k][2][0],images[k][2][1],anchor = NW, image=img)
On voit bien que les 2 dernières lignes sont décalées, donc à l'intérieur de la boucle
Et toi, tu écris:
for i in range (len(images)): img = PhotoImage(file=images[i][0]) can.create_image(images[i][2][0],images[i][2][1],anchor = NW, image=img)
Tout est aligné, donc la 1ere ligne, c'est une boucle qui tourne 20 fois et ne fait rien, et à la fin, le compteur i=19
Ensuite, on créé une image images[i][0], donc images[19][0] et on l'affiche
On n'affiche donc que la 19eme et dernière image ...
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
27 avril 2020 à 14:20
27 avril 2020 à 14:20
Merci c'est juste une erreur de copier coller sinon ça je l'avais bien compris et appris avant. Bon bah je crois que j'ai enfin réussis :) Merci beaucoup pour toutes les aides apportées, c'était pas gagné :')
Petite dernière question, peut-on incorporer ce programme à de l'HTML ? Incruster ce programme dans une page WEB ?
Petite dernière question, peut-on incorporer ce programme à de l'HTML ? Incruster ce programme dans une page WEB ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
27 avril 2020 à 17:50
27 avril 2020 à 17:50
une page web existante ?
ou un html que tu créé toi-même ?
ou un html que tu créé toi-même ?
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
27 avril 2020 à 21:20
27 avril 2020 à 21:20
Un html que je crée moi même sur Notepad++
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
28 avril 2020 à 09:12
28 avril 2020 à 09:12
Hello !
Comme ça, alors ? :
Comme ça, alors ? :
<!DOCTYPE HTML> <HEAD> <TITLE>Mon programme d'images</TITLE> </HEAD> <BODY> <PRE> # -*- coding:Latin-1 -*- # 09/10/2015 12:50:11 prenom = input('\nEntrez votre prénom: ') if(prenom == 'toto'): print('Bonjour', prenom) </PRE> </BODY> </HTML>
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
28 avril 2020 à 11:24
28 avril 2020 à 11:24
ou comme ça:
<!doctype html> <head> <title>Mon programme d'images</title> <style type="text/css"> p {color: #006666; font-family: Verdana; font-size : 20px} </style> </head> <body> <p>Voici mon superbe programme Python :</p> <pre> # -*- coding:Latin-1 -*- # 09/10/2015 12:50:11 prenom = input('\nEntrez votre prénom: ') if(prenom == 'toto'): print('Bonjour', prenom) </pre> <p>Chouette, non ?</p> </body> </html>
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
28 avril 2020 à 13:21
28 avril 2020 à 13:21
Oui voilà le 2e
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
29 avril 2020 à 11:06
29 avril 2020 à 11:06
Bonjour MrLemon,
Si tous les problèmes sont réglés, je pense que tu peux marquer cet appel comme "résolu"
:-)
Si tous les problèmes sont réglés, je pense que tu peux marquer cet appel comme "résolu"
:-)
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
29 avril 2020 à 22:31
29 avril 2020 à 22:31
Oui bien sur, et pour le html il faut juste que je rajoute ce que vous avez marqué ? Je veux intégrer mon programme a une page html
Bonne soirée
Bonne soirée
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
30 avril 2020 à 09:06
30 avril 2020 à 09:06
Bonjour MrLemon,
As-tu récupéré mon dernier code html (celui du 28 à 11h24) ?
Et l'as-tu exécuté pour voir ce qu'il affiche ?
Dis moi ce que tu vois sur la page qui s'affiche ...
As-tu récupéré mon dernier code html (celui du 28 à 11h24) ?
Et l'as-tu exécuté pour voir ce qu'il affiche ?
Dis moi ce que tu vois sur la page qui s'affiche ...
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
30 avril 2020 à 09:56
30 avril 2020 à 09:56
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
30 avril 2020 à 10:01
30 avril 2020 à 10:01
Et ce n'est pas ça que tu veux ?
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
30 avril 2020 à 11:42
30 avril 2020 à 11:42
Non pas du tout, j'aimerais que le programme que l'on vient de faire soit exécutable dans une page html, en gros j'aimerais que sur une page WEB on puisse cliquer sur les images et qu'on puisse voir leurs définitions.
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
30 avril 2020 à 12:13
30 avril 2020 à 12:13
Ah ok, ta demande n'était pas correcte :
".... Incruster ce programme dans une page WEB"
En fait, tu veux l'exécuter le script à partir de la page web !
Alors, là, je ne sais pas du tout ...
Je te propose de conclure cet appel et d'en recréer un nouveau avec la question :
"Comment exécuter un script Python à partir d'une page web ? "
Après tout, c'est un nouveau sujet, et du coup, quelqu'un d'autre pourra répondre
".... Incruster ce programme dans une page WEB"
En fait, tu veux l'exécuter le script à partir de la page web !
Alors, là, je ne sais pas du tout ...
Je te propose de conclure cet appel et d'en recréer un nouveau avec la question :
"Comment exécuter un script Python à partir d'une page web ? "
Après tout, c'est un nouveau sujet, et du coup, quelqu'un d'autre pourra répondre
MrLemon
Messages postés
74
Date d'inscription
mercredi 8 avril 2020
Statut
Membre
Dernière intervention
24 mai 2020
30 avril 2020 à 13:21
30 avril 2020 à 13:21
Pas de problème merci pour tout !