Création jeu — Interfaces — Python

Fermé
Firesta - Modifié le 14 mars 2018 à 14:57
 viljoyau - 14 mars 2018 à 18:40
Bonjour !

Je poste sur le forum à cause d'un problème avec de la programmation Python.
Nous sommes un groupe de 3, en Terminale, et dans le cadre de notre spécialité ISN nous devons finaliser un projet pour le Bac.
Il s'agit d'un mini-jeu adapté d'un roman d'heroic-fantasy. Je me charge des interfaces graphiques et je les ai toutes créées séparément pour m'assurer qu'elles fonctionnent. Ceci étant fait, je désire maintenant les faire communiquer à l'aide de boutons par des commandes appelant des fonctions. L'idée : passer d'une page à une autre en cliquant sur un bouton "Suivant".

Le souci est que j'arrive parfaitement à passer d'une page à une autre... Sauf en terme visuel ! L'image de fond du Canvas de la deuxième page n'apparaît pas, tout comme le design de notre petite mascotte. Pourtant, l'interface isolée s'affiche parfaitement.

Voici mon code :

#ASSOCIATION DES INTERFACES

#Importation de bibliothèque
from tkinter import *

def ME():
#Définition du canvas et paramètres
    zone1=Canvas(fen, bg="yellow", width="800", height="600")
    zone1.place(x=0, y=0)

#Récupération et positionnement de l'image dans le canvas
    texture1=PhotoImage(file="Fondgif.gif")
    zone1.create_image(700,350, image=texture1)

#Ajout de Flammèche
    mascotte=PhotoImage(file="flammechetransp.gif")
    zone1.create_image(650,475, image=mascotte)

#TEXTES
    titre=zone1.create_text(400, 50, fill="black", font="Lemon/Milk", text="EXPLICATIONS")
    intr=zone1.create_text(250, 100, fill="black", font="Garamond", text="TEXTE1")
    jeu1=zone1.create_text(350, 175, fill="black", font="Garamond", text="TEXTE2")
    jeu2=zone1.create_text(260, 270, fill="black", font="Garamond", text="TEXTE3")

#Bouton
    suite=Button(fen,text="JOUER !", font="Tahoma")
    suite.place(x=150,y=530)

#Création de la fenêtre
fen=Tk()

#Définition des paramètres
fen.geometry("800x600")
fen.title("FRAGEÜZENTA")
fen.resizable(width=False, height=False)

#Définition du canvas et paramètres
zone=Canvas(fen, bg="purple", width="800", height="600")
zone.place(x=0, y=0)

#Récupération et positionnement de l'image dans le canvas
texture=PhotoImage(file="dragonfond.gif")
zone.create_image(100,500, image=texture)

#TEXTES
titre=zone.create_text(150, 50, fill="white", font="Lemon/Milk", text="BIENVENUE !")
intr=zone.create_text(180, 200, fill="white", font="Garamond", text="TEXTE1")
expl=zone.create_text(150, 360, fill="white", font="Garamond", text="TEXTE2")
suite=zone.create_text(90, 450, fill="white", font="Garamond", text="TEXTE3")

#Bouton
suite=Button(fen,text="ACCÈS AU JEU...", font="Tahoma", command=ME)
suite.place(x=100,y=520)

#Lancement de la fenêtre
fen.mainloop()


On m'a conseillé de créer le Canvas "zone1" dans le programme principal et de laisser seulement la ligne de placement dans la fonction ME, mais ça fonctionne encore moins bien. De même que supprimer la première zone (j'utilise l'instruction zone.delete()).

Quelqu'un aurait une solution à mon problème ?

Merci d'avance à tous !
A voir également:

1 réponse

Bonjour,

C'est un problème plus que rencontré avec tkinter, cela provient du fait qu"à la sortie de ta fonction tes variables texture1 et mascotte sont détruites et que donc les références à tes images n'existent plus.

Pour résoudre cela, tu peux soit enregistrer ces références dans une liste définie ou dictionnaire hors de ta fonction.

mes_images = {}

def ME() :
    #....
    mes_images['texture1'] = PhotoImage(file="Fondgif.gif")
    zone1.create_image(700,350, image=mes_images['texture1'])
    # ....
    mes_images['mascotte'] = PhotoImage(file="flammechetransp.gif")
    zone1.create_image(650,475, image=mes_images['mascotte'])
    # ...



Soit les enregistrer directement dans le canvas ou autre widget tkinter.
0