Je travaille sur un programme pour une école. Programme dans lequel une nouvelle image doit être affichée à chaque réponse de l'élève (réponse par un clic sur un bouton
Mais voilà, autant l'image initiale se charge au démarrage, autant il est impossible de la changer
j'ai essayé de changer la variable donnant le nom de l'image en appellant une fonction
( dans cette fonctions sont définies trois variables qui correspondent aux centaines, dizaines unités, qui doivent etre représentées chacune par l'image affichée)
def changlab()
global cen
global di
global uni
global photocen
cent= random.randint(1,9
diz= random.randint(0,9
unit= random.randint(0,9
nb=cent*100 + diz*10 + uni
print n
if cent ==1
photocent="cent.gif
if cent ==2
photocent="deux-cents.gif
if cent ==3
photocent="trois-cents.gif
if cent ==4
photocent="quatre-cents.gif
if cent ==5
photocent="cinq-cents.gif
if cent ==6
photocent="six-cents.gif
if cent ==7
photocent="sept-cents.gif
if cent ==8
photocent="huit-cents.gif
if cent ==9
photocent="neuf-cents.gif
mais l'image ne change pas et reste celle chargée au départ
ensuite j'ai essayé de redéfinir le canvas complet dans la fonction, mais là plus rien ne marche !!!!
def changlab()
global cen
global di
global uni
global photocen
cent= random.randint(1,9
diz= random.randint(0,9
unit= random.randint(0,9
nb=cent*100 + diz*10 + uni
print n
if cent ==1
photocent="cent.gif
if cent ==2
photocent="deux-cents.gif
if cent ==3
photocent="trois-cents.gif
if cent ==4
photocent="quatre-cents.gif
if cent ==5
photocent="cinq-cents.gif
if cent ==6
photocent="six-cents.gif
if cent ==7
photocent="sept-cents.gif
if cent ==8
photocent="huit-cents.gif
if cent ==9
photocent="neuf-cents.gif
# création d'un widget 'Canvas' contenant une image bitmap
can4 = Canvas(cadreentree4, width =140, height =200
photo4 = PhotoImage(file ="trente.gif"
item = can4.create_image(70, 90, image =photo4
can4.pack(
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
F. Petitjean
Je travaille sur un programme pour une école.
Mais voilà, autant l'image initiale se charge au démarrage, autant il est impossible de la changer. j'ai essayé de changer la variable donnant le nom de l'image en appellant une fonction : ( dans cette fonctions sont définies trois variables qui correspondent aux centaines, dizaines unités, qui doivent etre représentées chacune par l'image affichée) :
def changlab(): Ajoutez ici la « docstring » de cette fonction.
global cent global diz global unit global photocent Un conseil : évitez le plus possible d'utiliser « global ».
cent= random.randint(1,9) diz= random.randint(0,9) unit= random.randint(0,9) nbÎnt*100 + diz*10 + unit print nb
if cent ==1: photocent="cent.gif" if cent ==2: photocent="deux-cents.gif" if cent ==3: photocent="trois-cents.gif" if cent ==4: photocent="quatre-cents.gif" if cent ==5: photocent="cinq-cents.gif" if cent ==6: photocent="six-cents.gif" if cent ==7: photocent="sept-cents.gif" if cent ==8: photocent="huit-cents.gif" if cent ==9: photocent="neuf-cents.gif" Cette suite de « if » est bien inutile :
mais l'image ne change pas et reste celle chargée au départ. Vous ne nous indiquez pas comment vous chargez ou changez une image,
c'est ce code là qui nous intéresse.
ensuite j'ai essayé de redéfinir le canvas complet dans la fonction, mais là plus rien ne marche !!!! :
snip
# création d'un widget 'Canvas' contenant une image bitmap : can4 = Canvas(cadreentree4, width 0, height 0) photo4 = PhotoImage(file ="trente.gif") item = can4.create_image(70, 90, image =photo4) can4.pack()
Il semblerait que vous utilisiez Tkinter (pourquoi ne pas l'avoir dit
dès le début ?) Il y a un piège bien vonnu dans la gestion des images dans Tkinter : il faut absolument programmer en gardant une référence aux données de l'image : ici la variable photo4 est passée à la trappe par le ramasse miettes dès la sortie de la fonction (*) et le pauvre canvas ne peut pas retrouver les paramètres de l'image à afficher lors que le système lui demande de dessiner la fenêtre. C'est une sorte de piège car pour les widgets (cadreentree4 ou can4 ..) garder une référence Python n'est pas nécessaire, c'est automatique.
Je vous conseille donc de créer une classe représentant la fenêtre et de conserver les images comme attributs. N'hésitez pas à poser des questions supplémentaires si cela n'est pas clair pour vous.
Note (*) en anglais garbage collected.
Je travaille sur un programme pour une école.
Mais voilà, autant l'image initiale se charge au démarrage, autant il est impossible de la changer.
j'ai essayé de changer la variable donnant le nom de l'image en appellant une fonction :
( dans cette fonctions sont définies trois variables qui correspondent aux centaines, dizaines unités, qui doivent etre représentées chacune par l'image affichée) :
def changlab():
Ajoutez ici la « docstring » de cette fonction.
global cent
global diz
global unit
global photocent
Un conseil : évitez le plus possible d'utiliser « global ».
cent= random.randint(1,9)
diz= random.randint(0,9)
unit= random.randint(0,9)
nbÎnt*100 + diz*10 + unit
print nb
if cent ==1:
photocent="cent.gif"
if cent ==2:
photocent="deux-cents.gif"
if cent ==3:
photocent="trois-cents.gif"
if cent ==4:
photocent="quatre-cents.gif"
if cent ==5:
photocent="cinq-cents.gif"
if cent ==6:
photocent="six-cents.gif"
if cent ==7:
photocent="sept-cents.gif"
if cent ==8:
photocent="huit-cents.gif"
if cent ==9:
photocent="neuf-cents.gif"
Cette suite de « if » est bien inutile :
mais l'image ne change pas et reste celle chargée au départ.
Vous ne nous indiquez pas comment vous chargez ou changez une image,
c'est ce code là qui nous intéresse.
ensuite j'ai essayé de redéfinir le canvas complet dans la fonction, mais là plus rien ne marche !!!! :
snip
# création d'un widget 'Canvas' contenant une image bitmap :
can4 = Canvas(cadreentree4, width 0, height 0)
photo4 = PhotoImage(file ="trente.gif")
item = can4.create_image(70, 90, image =photo4)
can4.pack()
Il semblerait que vous utilisiez Tkinter (pourquoi ne pas l'avoir dit
dès le début ?) Il y a un piège bien vonnu dans la gestion des images
dans Tkinter : il faut absolument programmer en gardant une référence
aux données de l'image : ici la variable photo4 est passée à la trappe
par le ramasse miettes dès la sortie de la fonction (*) et le pauvre
canvas ne peut pas retrouver les paramètres de l'image à afficher lors
que le système lui demande de dessiner la fenêtre.
C'est une sorte de piège car pour les widgets (cadreentree4 ou can4
..) garder une référence Python n'est pas nécessaire, c'est automatique.
Je vous conseille donc de créer une classe représentant la fenêtre et
de conserver les images comme attributs. N'hésitez pas à poser des
questions supplémentaires si cela n'est pas clair pour vous.
Mais voilà, autant l'image initiale se charge au démarrage, autant il est impossible de la changer. j'ai essayé de changer la variable donnant le nom de l'image en appellant une fonction : ( dans cette fonctions sont définies trois variables qui correspondent aux centaines, dizaines unités, qui doivent etre représentées chacune par l'image affichée) :
def changlab(): Ajoutez ici la « docstring » de cette fonction.
global cent global diz global unit global photocent Un conseil : évitez le plus possible d'utiliser « global ».
cent= random.randint(1,9) diz= random.randint(0,9) unit= random.randint(0,9) nbÎnt*100 + diz*10 + unit print nb
if cent ==1: photocent="cent.gif" if cent ==2: photocent="deux-cents.gif" if cent ==3: photocent="trois-cents.gif" if cent ==4: photocent="quatre-cents.gif" if cent ==5: photocent="cinq-cents.gif" if cent ==6: photocent="six-cents.gif" if cent ==7: photocent="sept-cents.gif" if cent ==8: photocent="huit-cents.gif" if cent ==9: photocent="neuf-cents.gif" Cette suite de « if » est bien inutile :
mais l'image ne change pas et reste celle chargée au départ. Vous ne nous indiquez pas comment vous chargez ou changez une image,
c'est ce code là qui nous intéresse.
ensuite j'ai essayé de redéfinir le canvas complet dans la fonction, mais là plus rien ne marche !!!! :
snip
# création d'un widget 'Canvas' contenant une image bitmap : can4 = Canvas(cadreentree4, width 0, height 0) photo4 = PhotoImage(file ="trente.gif") item = can4.create_image(70, 90, image =photo4) can4.pack()
Il semblerait que vous utilisiez Tkinter (pourquoi ne pas l'avoir dit
dès le début ?) Il y a un piège bien vonnu dans la gestion des images dans Tkinter : il faut absolument programmer en gardant une référence aux données de l'image : ici la variable photo4 est passée à la trappe par le ramasse miettes dès la sortie de la fonction (*) et le pauvre canvas ne peut pas retrouver les paramètres de l'image à afficher lors que le système lui demande de dessiner la fenêtre. C'est une sorte de piège car pour les widgets (cadreentree4 ou can4 ..) garder une référence Python n'est pas nécessaire, c'est automatique.
Je vous conseille donc de créer une classe représentant la fenêtre et de conserver les images comme attributs. N'hésitez pas à poser des questions supplémentaires si cela n'est pas clair pour vous.