IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GUI Python Discussion :

Visibilité des variables


Sujet :

GUI Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Visibilité des variables
    Bonjour à tous, je viens de fraichement créer un petit programme pour concevoir un jeu sous python et le module Tkinter. Mais voila, quand j'assemble mes deux premier prototypes, voila ce que la console m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
        return self.func(*args)
      File "C:/Users/Maxime Helen/Desktop/Programme/Jeu_complet.py", line 89, in scenario
        joueur = saisir.get()
    NameError: global name 'saisir' is not defined
    Alors que quand j'isole le prototype d'où le problème vient, tout marche parfaitement !
    Voici mon programme en entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    from Tkinter import *
    from os import chdir
    chdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
    # Importe fonctions de gestions des fichiers et met le dossier de sauvegarde des
    # des fiches en répertoire courant
     
    def Moyen_Orient () :
        print "sa marche"
     
    def Afrique () :
        print "sa marche "
     
    def Amerique_Nord () :
        print "sa marche "
     
    def Amerique_Sud () :
        print "sa marche "
     
    def Europe () :
        print "sa marche "
     
    def Asie () :
        print "sa marche "
     
    def Australie () :
        print "sa marche "
     
    def MaisonEinstein () :
        print "sa marche "
     
     
    ######################################## FENETRE DE LA CARTE DU CONTINENT ###########################################################
     
    def carte_monde () :
     
        fenetre_carte_monde = Toplevel ()
        fenetre_fenetre_nvlpartie.destroy()
        fenetre_carte_monde.title ("carte du monde")
        fenetre_carte_monde.geometry("1600x755")
        fenetre_carte_monde.wm_state(newstate="zoomed")
        # Création de la nouvelle fenêtre décrivant le scénario
     
        cadre2 = Canvas(fenetre_carte_monde,width=1488,height=755,bg="black")
        imageCarteMonde = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\Carte monde.gif")
        image_id3 = cadre2.create_image(744,375,image = imageCarteMonde)
        # Création du canvas positionnant l'image d'einstein
     
        bouton_MoyenOrient=Button(fenetre_carte_monde, text="Moyen Orient",\
                                  command =Moyen_Orient, bg = "green" )
        bouton_Afrique=Button(fenetre_carte_monde, text="Afrique",\
                                  command = Afrique, bg = "blue" )
        bouton_Amérique_Nord=Button(fenetre_carte_monde, text="Amérique du Nord",\
                                  command = Amerique_Nord, bg = "orange" )
        bouton_Amérique_Sud=Button(fenetre_carte_monde, text="Amérique du Sud",\
                                  command = Amerique_Sud, bg = "red" )
        bouton_Europe=Button(fenetre_carte_monde, text="Europe",\
                                  command = Europe, bg = "white" )
        bouton_Asie=Button(fenetre_carte_monde, text="Asie",\
                                  command = Asie, bg = "pink" )
        bouton_Australie=Button(fenetre_carte_monde, text="Australie",\
                                  command = Australie, bg = "Yellow" )
        bouton_MaisonEinstein=Button(fenetre_carte_monde, text="Maison d'Einstein",\
                                  command = MaisonEinstein, bg = "magenta" )
        # Création des boutons permettant la navigation dans le monde
     
        texte1 = Text(fenetre_carte_monde, width = 30, height = 20)
        content = open("C:\Users\Maxime Helen\Desktop\Programme\Tutorial.txt",'r').read() 
        texte1.insert(AtEnd(),content)
        texte1.config(wrap=WORD)
        # Création du texte décrivant le tutorial de la carte du monde
     
        bouton_MoyenOrient.place(x = 850, y = 230)
        bouton_Afrique.place(x = 750, y = 290)
        bouton_Amérique_Nord.place(x = 295, y = 150)
        bouton_Amérique_Sud.place(x = 400, y = 410)
        bouton_Europe.place(x = 750, y = 135)
        bouton_Asie.place(x = 1050, y = 160)
        bouton_Australie.place(x = 1225, y = 475)
        bouton_MaisonEinstein.place(x = 744, y = 700)
        texte1.place(x=0,y=250)
        cadre2.pack()
        # Placement des widgets
     
    ######################################## FENETRE DE NOUVELLE PARTIE ###########################################################
     
     
     
    def scenario ():
        joueur = saisir.get()
        # Enregistrement du nom du joueur
        fenetre_nouvelle_partie = destroy()
        fenetre_scénario = Toplevel ()
        fenetre_scénario.geometry("1400x1000")
        fenetre_scénario.title("scénario")
        # Création de la nouvelle fenêtre décrivant le scénario
     
        FichierSauvegarde = open(joueur,'a')
        FichierSauvegarde.close()
        # Crée un nouveau fichier de sauvegarde du nom saisie.
     
        lb = Label ( fenetre_scénario, text = "Bienvenue", bg="blue")
        lb1 = Label ( fenetre_scénario, text = joueur, bg="blue")
        # Label de bienvenue avec le nom du joueur
     
        cadre1 = Canvas(fenetre_scénario,width=200,height=200,bg="white")
        imageeinstein2 = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein2.gif")
        image_id2 = cadre1.create_image(100,100,image = imageeinstein2)
        # Création du canvas positionnant l'image d'einstein
     
        texte = Text(fenetre_scénario, width = 100, height = 100)
        content = open("C:\Users\Maxime Helen\Desktop\Programme\scénario.txt",'r').read() 
        texte.insert(AtEnd(),content)
        # Création du texte mettant en scène le scénario
     
        bouton_carte_monde=Button(fenetre_scénario, text="Lancer la partie !", command =carte_monde, bg = "red" )
        # Création du bouton pour lancer la partie
     
        lb.place(x=100,y=500)
        lb1.place(x=200,y=500)
        bouton_carte_monde.place(x=1200,y=500)
        cadre1.pack()
        texte.pack()
        # Placement des widgets
     
     
    def nouvelle_partie () :
        fenetredebut.destroy()
        fenetre_nvlpartie = Toplevel ()
        fenetre_nvlpartie.title("Nouvelle partie")
        # Création d'une nouvelle fenêtre pour créer une nouvelle partie
     
        txt1 = Label(fenetre_nvlpartie, text ='Nom du nouveau joueur :')
        saisir = StringVar()
        entr1 = Entry(fenetre_nvlpartie,textvariable = saisir, width = 20)
        txt1.grid(row=1, sticky = E)
        entr1.grid(row =1, column =2)
        # Crée l'espace de saisie du nouveau fichier
     
        bouton_OK=Button(fenetre_nvlpartie, text="OK", command = scenario )
        bouton_OK.grid(row =2,column = 2)
        # Bouton marquant la fin de la saisie et appel la fonction qui va créer
        # le fichier qui aura pour nom l'entrée saisie : " saisie ".
     
     
     
    ######################################## FENETRE DE DEBUT ###########################################################
     
     
    # Création de la fenêtre principale
    fenetredebut=Tk()
    fenetredebut.geometry("900x500")
    fenetredebut.title("Mon jeu")
     
    # Titre du jeu
    titrejeu = Label(fenetredebut, text="Qui se sent capable de rivaliser avec Einstein ?")
     
     
    ### canvas avec l'image du jeu  
    cadre = Canvas(fenetredebut,width=400,height=521,bg="white")
    imageeinstein = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein1.gif")
    image_id = cadre.create_image(200,260,image = imageeinstein)
     
     
    # Création des boutons de commencement du jeu
    bouton_nouvelle_partie=Button(fenetredebut, text="Débuter une nouvelle partie",command=nouvelle_partie) 
    bouton_charger_partie=Button(fenetredebut, text="Charger partie")#,command=charger_partie#)
    bouton_supprimmer_partie=Button(fenetredebut, text="Supprimer partie")#, command=supprimer_partie)  
    bouton_quitter_jeux=Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy) 
     
     
    ### Mise en page des boutons et canvas de l'image
    bouton_nouvelle_partie.grid(row =2,sticky =E )
    bouton_charger_partie.grid(row =3, sticky =E)
    bouton_supprimmer_partie.grid(row =4, sticky =E)
    bouton_quitter_jeux.grid(row =5, sticky =E)
    titrejeu.grid(row =1, column = 2)
    cadre.grid(row=2,column = 2,rowspan =4)
    Je ne comprends pas... Surtout que j'ai annoncer 'saisir' comme un textvariable.
    Merci de m'aider ! Je vous serai très reconnaissant de me sortir de ce guépier, surtout que je dois soutenir ce programme devant un jury la semaine prochaine !

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour tefacorp,

    Désolé de le dire (Ce n'est pas un reproche, j'ai sans doute fais pire/Tkinter c'est un bon début, persévère) mais il y as du travail.
    C'est la structure de ton code et la visibilité des variables/objet ton problème.
    Si tu déplace saisir ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Creation de la fenêtre principale
    fenetredebut=Tk()
    fenetredebut.geometry("900x500")
    fenetredebut.title("Mon jeu")
    saisir = StringVar()
    Tu vas voir que tu as d'autres problèmes.

    Par exemple le fenetre_nouvelle_partie = destroy() j'avais jamais vus.
    fenetre_nouvelle_partie.destroy() par contre cela me parle.

    Même si tu corrige cela tu arrive sur un global name 'fenetre_nouvelle_partie' is not defined : sympa.

    C'est la structure qui est à revoir (et la portée des objets/variables).

    De plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fenetredebut=Tk()
    ...
    def nouvelle_partie () :
        fenetredebut.destroy()
        fenetre_nvlpartie = Toplevel ()
    Détruire ta fenêtre principale (Tk, il ne dois y en avoir qu'une) et lui créer un Toplevel ?

    Etc...

    Regarde ce code (Pas trop mal pour un début) par exemple.

    Avant de te lancer regarde ceci à partir d'ici mais pour ta structure ici.

    Bon code

    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci PauseKawa de me répondre aussi rapidement.
    En effet, je me suis très vite rendu compte de mes lacunes... C'est pourquoi j'ai potasser un peu et régler ce problème. J'ai compris qu'il fallait returné des valeur après les fonctions pour me permettre de les réutiliser. Mais voila, j'ai un autre problème un peu plus inquiétant. Mon programme marche enfin comme je le voulais sauf que dans la fonction carte_monde () tout se lance parfaitement bien sauf l'image associé au canvas : Carte monde.gif . En effet, il y apparait tout les boutons et le texte sauf la photo associé au canvas. J'ai seulement le cadre noire délimitant le canvas. Alors qu'une nouvelle fois, quand j'isole la fonction exactement comme elle est écrite ici, l'image apparait bien... Merci encore une fois de m'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    from Tkinter import *
    from os import chdir
    chdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
    # Importe fonctions de gestions des fichiers et met le dossier de sauvegarde des
    # des fiches en répertoire courant
     
    def Moyen_Orient () :
     
        return 
     
    def Afrique () :
        print "sa marche "
     
    def Amerique_Nord () :
        print "sa marche "
     
    def Amerique_Sud () :
        print "sa marche "
     
    def Europe () :
        print "sa marche "
     
    def Asie () :
        print "sa marche "
     
    def Australie () :
        print "sa marche "
     
    def MaisonEinstein () :
        print "sa marche "
     
     
    ######################################## FENETRE DE LA CARTE DU CONTINENT ###########################################################
     
    def carte_monde (fenetre_scénario) :
        fenetre_scénario.destroy()
        fenetre_carte_monde = Tk()
        fenetre_carte_monde.title ("carte du monde")
        fenetre_carte_monde.geometry("1500x800")
     
     
        # Création de la nouvelle fenêtre décrivant le scénario
        cadre4 = Canvas(fenetre_carte_monde,width=1488,height=755,bg="black")
        imageCarteMonde = PhotoImage(file="C:\Users\Maxime   Helen\Desktop\Programme\Carte monde.gif")
        image_id3 = cadre4.create_image(744,375,image = imageCarteMonde)
     
        # Création du canvas positionnant l'image d'einstein
     
        bouton_MoyenOrient=Button(fenetre_carte_monde, text="Moyen Orient",\
                                  command = lambda : Moyen_Orient(fenetre_carte_monde), bg = "green" )
        bouton_Afrique=Button(fenetre_carte_monde, text="Afrique",\
                                  command = Afrique, bg = "blue" )
        bouton_Amérique_Nord=Button(fenetre_carte_monde, text="Amérique du Nord",\
                                  command = Amerique_Nord, bg = "orange" )
        bouton_Amérique_Sud=Button(fenetre_carte_monde, text="Amérique du Sud",\
                                  command = Amerique_Sud, bg = "red" )
        bouton_Europe=Button(fenetre_carte_monde, text="Europe",\
                                  command = Europe, bg = "white" )
        bouton_Asie=Button(fenetre_carte_monde, text="Asie",\
                                  command = Asie, bg = "pink" )
        bouton_Australie=Button(fenetre_carte_monde, text="Australie",\
                                  command = Australie, bg = "Yellow" )
        bouton_MaisonEinstein=Button(fenetre_carte_monde, text="Maison d'Einstein",\
                                  command = MaisonEinstein, bg = "magenta" )
        # Création des boutons permettant la navigation dans le monde
     
        texte1 = Text(fenetre_carte_monde, width = 30, height = 20)
        content = open("C:\Users\Maxime Helen\Desktop\Programme\Tutorial.txt",'r').read() 
        texte1.insert(AtEnd(),content)
        texte1.config(wrap=WORD)
        # Création du texte décrivant le tutorial de la carte du monde
     
        bouton_MoyenOrient.place(x = 850, y = 230)
        bouton_Afrique.place(x = 750, y = 290)
        bouton_Amérique_Nord.place(x = 295, y = 150)
        bouton_Amérique_Sud.place(x = 400, y = 410)
        bouton_Europe.place(x = 750, y = 135)
        bouton_Asie.place(x = 1050, y = 160)
        bouton_Australie.place(x = 1225, y = 475)
        bouton_MaisonEinstein.place(x = 744, y = 700)
        texte1.place(x=0,y=250)
        cadre4.pack()
        # Placement des widgets
        return fenetre_carte_monde, 
     
    ######################################## FENETRE DE NOUVELLE PARTIE ###########################################################
     
     
     
    def scenario (saisir,fenetre_nvlpartie):
        joueur = saisir
        # Enregistrement du nom du joueur
        fenetre_nvlpartie.destroy()
        fenetre_scénario = Tk()
        fenetre_scénario.geometry("1400x1000")
        fenetre_scénario.title("scénario")
        # Création de la nouvelle fenêtre décrivant le scénario
     
        FichierSauvegarde = open(joueur,'a')
        FichierSauvegarde.close()
        # Crée un nouveau fichier de sauvegarde du nom saisie.
     
        lb = Label ( fenetre_scénario, text = "Bienvenue", bg="blue")
        lb1 = Label ( fenetre_scénario, text = joueur, bg="blue")
        # Label de bienvenue avec le nom du joueur
     
        cadre1 = Canvas(fenetre_scénario,width=200,height=200,bg="white")
        imageeinstein2 = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein2.gif")
        image_id2 = cadre1.create_image(100,100,image = imageeinstein2)
        # Création du canvas positionnant l'image d'einstein
     
        texte = Text(fenetre_scénario, width = 100, height = 100)
        content = open("C:\Users\Maxime Helen\Desktop\Programme\scénario.txt",'r').read() 
        texte.insert(AtEnd(),content)
        # Création du texte mettant en scène le scénario
     
        bouton_carte_monde=Button(fenetre_scénario, text="Lancer la partie !", command = lambda : carte_monde (fenetre_scénario), bg = "red" )
        # Création du bouton pour lancer la partie
     
        lb.place(x=100,y=500)
        lb1.place(x=200,y=500)
        bouton_carte_monde.place(x=1200,y=500)
        cadre1.pack()
        texte.pack()
        # Placement des widgets
        fenetre_scénario.mainloop()
        return fenetre_scénario, imageCarteMonde
     
    def nouvelle_partie () :
        fenetredebut.destroy()
        fenetre_nvlpartie = Tk()
        fenetre_nvlpartie.title("Nouvelle partie")
        fenetre_nvlpartie.wm_state(newstate="zoomed")
        # Création d'une nouvelle fenêtre pour créer une nouvelle partie
     
        txt1 = Label(fenetre_nvlpartie, text ='Nom du nouveau joueur :')
        saisir = StringVar()
        entr1 = Entry(fenetre_nvlpartie,textvariable = saisir, width = 30)
        saisir.set("Entrez votre nom ici")
        txt1.grid(row=1, sticky = E)
        entr1.grid(row =1, column =2)
        # Crée l'espace de saisie du nouveau fichier
     
        bouton_OK=Button(fenetre_nvlpartie, text="OK", command = lambda : scenario(saisir.get(),fenetre_nvlpartie))
        bouton_OK.grid(row =2,column = 2)
        # Bouton marquant la fin de la saisie et appel la fonction qui va créer
        # le fichier qui aura pour nom l'entrée saisie : " saisir ".
        return saisir, fenetre_nvlpartie
     
     
    ######################################## FENETRE DE DEBUT ###########################################################
     
     
    # Création de la fenêtre principale
    fenetredebut=Tk()
    fenetredebut.geometry("900x500")
    fenetredebut.title("Mon jeu")
     
     
    # Titre du jeu
    titrejeu = Label(fenetredebut, text="Qui se sent capable de rivaliser avec Einstein ?")
     
     
    ### canvas avec l'image du jeu  
    cadre = Canvas(fenetredebut,width=400,height=521,bg="white")
    imageeinstein = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein1.gif")
    image_id = cadre.create_image(200,260,image = imageeinstein)
     
     
    # Création des boutons de commencement du jeu
    bouton_nouvelle_partie=Button(fenetredebut, text="Débuter une nouvelle partie",command=nouvelle_partie) 
    bouton_charger_partie=Button(fenetredebut, text="Charger partie")#,command=charger_partie#)
    bouton_supprimmer_partie=Button(fenetredebut, text="Supprimer partie")#, command=supprimer_partie)  
    bouton_quitter_jeux=Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy) 
     
     
    ### Mise en page des boutons et canvas de l'image
    bouton_nouvelle_partie.grid(row =2,sticky =E )
    bouton_charger_partie.grid(row =3, sticky =E)
    bouton_supprimmer_partie.grid(row =4, sticky =E)
    bouton_quitter_jeux.grid(row =5, sticky =E)
    titrejeu.grid(row =1, column = 2)
    cadre.grid(row=2,column = 2,rowspan =4)
     
    fenetredebut.mainloop ()
    Je précise que la console de python ne remarque aucune erreur....

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Tu as deux fenêtres Tk, Photoimage n'aime pas cela.
    Regarde du coté de Toplevel.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Tout d'abord encore merci pour l'aide apporter, comme tu l'as si bien dit : je débute ! Néanmoins je ne comprends pas ce que tu veux dire : dans ma fonction carte_monde () je n'ai qu'une commande Tk() appelée ! -> fenetre_carte_monde = Tk(). Et j'ai beau remplacer Toplevel () par Tk() le problème persiste : canvas noir. J'ai sans doute pas très bien compris ce que tu veux dire, peux-tu préciser ?

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def nouvelle_partie () :
        fenetredebut.destroy() # Tu fais un destroy sur ta fenetre principale... 
        fenetre_nvlpartie = Tk() Pour faire une nouvelle fenêtre Tk...
    ....
    # Création de la fenêtre principale
    fenetredebut=Tk()
    fenetredebut.mainloop () # Ta fenetre Tk principale.
    Une seule instance Tk svp. Regarde les liens.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    RAAAAA j'ai enfin compris mon erreur ! Merci pour ta patience, PauseKawa ! Voici mon programme qui fonctionne parfaitement :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    from os import chdir, listdir, remove
    chdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
    # Importe fonctions de gestions des fichiers et met le dossier de sauvegarde des
    # des fiches en répertoire courant.
     
    ###### (
    def Moyen_Orient () :
     
        return 
     
    def Afrique () :
        print "sa marche "
     
    def Amerique_Nord () :
        print "sa marche "
     
    def Amerique_Sud () :
        print "sa marche "
     
    def Europe () :
        print "sa marche "
     
    def Asie () :
        print "sa marche "
     
    def Australie () :
        print "sa marche "
     
    def MaisonEinstein () :
        print "sa marche "
    ########## ) Suite pour P3
     
    ######################################## FENETRE DE LA CARTE DU CONTINENT ###########################################################
     
    def carte_monde (fenetre_scénario) :
     
     
        fenetre_carte_monde = Toplevel()
        fenetre_scénario.destroy()
        fenetre_carte_monde.title ("carte du monde")
        fenetre_carte_monde.geometry("1500x800")
     
     
        # Création de la nouvelle fenêtre décrivant le scénario
        cadre4 = Canvas(fenetre_carte_monde,width=1488,height=755,bg="black")
        imageCarteMonde = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\Carte monde.gif")
        image_id3 = cadre4.create_image(744,375,image = imageCarteMonde)
     
        # Création du canvas positionnant l'image d'einstein
     
        bouton_MoyenOrient=Button(fenetre_carte_monde, text="Moyen Orient",\
                                  command = lambda : Moyen_Orient(fenetre_carte_monde), bg = "green" )
        bouton_Afrique=Button(fenetre_carte_monde, text="Afrique",\
                                  command = Afrique, bg = "blue" )
        bouton_Amérique_Nord=Button(fenetre_carte_monde, text="Amérique du Nord",\
                                  command = Amerique_Nord, bg = "orange" )
        bouton_Amérique_Sud=Button(fenetre_carte_monde, text="Amérique du Sud",\
                                  command = Amerique_Sud, bg = "red" )
        bouton_Europe=Button(fenetre_carte_monde, text="Europe",\
                                  command = Europe, bg = "white" )
        bouton_Asie=Button(fenetre_carte_monde, text="Asie",\
                                  command = Asie, bg = "pink" )
        bouton_Australie=Button(fenetre_carte_monde, text="Australie",\
                                  command = Australie, bg = "Yellow" )
        bouton_MaisonEinstein=Button(fenetre_carte_monde, text="Maison d'Einstein",\
                                  command = MaisonEinstein, bg = "magenta" )
        # Création des boutons permettant la navigation dans le monde
     
        texte1 = Text(fenetre_carte_monde, width = 30, height = 20)
        content = open("C:\Users\Maxime Helen\Desktop\Programme\Tutorial.txt",'r').read() 
        texte1.insert(AtEnd(),content)
        texte1.config(wrap=WORD)
        # Création du texte décrivant le tutorial de la carte du monde
     
        bouton_MoyenOrient.place(x = 850, y = 230)
        bouton_Afrique.place(x = 750, y = 290)
        bouton_Amérique_Nord.place(x = 295, y = 150)
        bouton_Amérique_Sud.place(x = 400, y = 410)
        bouton_Europe.place(x = 750, y = 135)
        bouton_Asie.place(x = 1050, y = 160)
        bouton_Australie.place(x = 1225, y = 475)
        bouton_MaisonEinstein.place(x = 744, y = 700)
        texte1.place(x=0,y=250)
        cadre4.pack()
        # Placement des widgets
        fenetre_carte_monde.mainloop()
        return fenetre_carte_monde
     
    ######################################## FENETRE DE NOUVELLE PARTIE ###########################################################
     
     
     
    def scenario (saisir,fenetre_nvlpartie):
        joueur = saisir
        # Enregistrement du nom du joueur
        fenetre_scénario = Toplevel()
        fenetre_nvlpartie.destroy()
        fenetre_scénario.geometry("1400x1000")
        fenetre_scénario.title("scénario")
        # Création de la nouvelle fenêtre décrivant le scénario
     
        FichierSauvegarde = open(joueur,'a')
        FichierSauvegarde.close()
        # Crée un nouveau fichier de sauvegarde du nom saisie.
     
        lb = Label ( fenetre_scénario, text = "Bienvenue")
        lb1 = Label ( fenetre_scénario, text = joueur)
        # Label de bienvenue avec le nom du joueur
     
        cadre1 = Canvas(fenetre_scénario,width=200,height=200,bg="white")
        imageeinstein2 = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein2.gif")
        image_id2 = cadre1.create_image(100,100,image = imageeinstein2)
        # Création du canvas positionnant l'image d'einstein
     
        texte = Text(fenetre_scénario, width = 100, height = 100)
        content = open("C:\Users\Maxime Helen\Desktop\Programme\scénario.txt",'r').read() 
        texte.insert(AtEnd(),content)
        # Création du texte mettant en scène le scénario
     
        bouton_carte_monde=Button(fenetre_scénario, text="Lancer la partie !", command = lambda : carte_monde (fenetre_scénario), bg = "red" )
        # Création du bouton pour lancer la partie
     
        lb.place(x=100,y=500)
        lb1.place(x=200,y=500)
        bouton_carte_monde.place(x=1200,y=500)
        cadre1.pack()
        texte.pack()
        # Placement des widgets
        fenetre_scénario.mainloop()
        return fenetre_scénario
     
    def nouvelle_partie () :
        fenetre_nvlpartie = Toplevel()
        #
        fenetre_nvlpartie.title("Nouvelle partie")
        fenetre_nvlpartie.wm_state(newstate="zoomed")
        # Création d'une nouvelle fenêtre pour créer une nouvelle partie
     
        txt1 = Label(fenetre_nvlpartie, text ='Nom du nouveau joueur :')
        saisir = StringVar()
        entr1 = Entry(fenetre_nvlpartie,textvariable = saisir, width = 40)
        saisir.set("Entrez votre nom ici")
        txt1.grid(row=1, sticky = E)
        entr1.grid(row =1, column =2)
        # Crée l'espace de saisie du nouveau fichier
     
        bouton_OK=Button(fenetre_nvlpartie, text="OK", command = lambda : scenario(saisir.get(),fenetre_nvlpartie))
        bouton_OK.grid(row =2,column = 2)
        # Bouton marquant la fin de la saisie et appel la fonction qui va créer
        # le fichier qui aura pour nom l'entrée saisie : " saisir ".
        fenetre_nvlpartie.mainloop()
        return saisir, fenetre_nvlpartie
     
     
    ############################################ FENETRE DE SUPRESSION DE PARTIES SAUVEGARDEES ################################################################################
     
     
    def supprimer_partie (fenetredebut) :
     
     
        fenetre_supression = Toplevel()
        fenetre_supression.geometry("500x500")
        fenetre_supression.title("Supprimer fichier sauvegarde")
        # Création de la fenêtre principale
     
        list_sav = listdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
        # forme une liste de tout les fichiers du répertoire qui stocke les fichiers de sauvegardes
     
        nombre_fichier = len(list_sav)
        # Calcule le nombre de fichier qu'il y a dans le répertoire
     
        if nombre_fichier==0 :
                txt4 = Label (fenetre_supression, text = "aucune partie sauvegardée à supprimer")
                txt4.place(x=200,y=250)
        #S'il n'y a aucun fichier dans le repertoire, il le fait remarquer.
     
        for i in range (nombre_fichier) :
            nom_fichier = list_sav[i]
            txt3 = Label(fenetre_supression, text = "nom du joueur :")
            txt2 = Label(fenetre_supression, text = nom_fichier)
            bouton_supr = Button(fenetre_supression, text="Supprimer ce fichier, cliquez ici", command = lambda : remove(nom_fichier))
            txt3.place(x=10, y=50*i)
            txt2.place(x=100,y=50*i)
            bouton_supr.place(x=300,y=50*i)
            list_sav1 = listdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
            nombre_fichier1 = len(list_sav)
            if nombre_fichier1==0 :
                txt4 = Label (fenetre_supression, text = "aucune partie sauvegardée à supprimer")
                txt4.place(x=200,y=250)
        # Création d'un boucle qui crée des labels des noms des fichiers et des boutons qui permet de commander leurs suppression.
        #La boucle permet de crée un bouton et un label par fichier trouver dans le répertoire sotckant les sauvegardes.
        #S'il n'existe plus aucun fichier dans le repertoire, il le fait remarquer.
        fenetre_supression.mainloop ()
     
     
        return
     
     
     
    ######################################## FENETRE DE DEBUT ###########################################################
     
     
    # Création de la fenêtre principale
    fenetredebut=Tk()
    fenetredebut.geometry("900x500")
    fenetredebut.title("Mon jeu")
     
     
    # Titre du jeu
    titrejeu = Label(fenetredebut, text="Qui se sent capable de rivaliser avec Einstein ?")
     
     
    ### canvas avec l'image du jeu  
    cadre = Canvas(fenetredebut,width=400,height=521,bg="white")
    imageeinstein = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein1.gif")
    image_id = cadre.create_image(200,260,image = imageeinstein)
     
     
    # Création des boutons de commencement du jeu
    bouton_nouvelle_partie=Button(fenetredebut, text="Débuter une nouvelle partie",command=nouvelle_partie) 
    bouton_charger_partie=Button(fenetredebut, text="Charger partie")#,command=charger_partie; Fonctionnalité de P5
    bouton_supprimmer_partie=Button(fenetredebut, text="Supprimer partie", command = lambda : supprimer_partie(fenetredebut)) 
    bouton_quitter_jeux=Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy) 
     
     
    ### Mise en page des boutons et canvas de l'image
    bouton_nouvelle_partie.grid(row =2,sticky =E )
    bouton_charger_partie.grid(row =3, sticky =E)
    bouton_supprimmer_partie.grid(row =4, sticky =E)
    bouton_quitter_jeux.grid(row =5, sticky =E)
    titrejeu.grid(row =1, column = 2)
    cadre.grid(row=2,column = 2,rowspan =4)
     
     
    fenetredebut.mainloop ()
    Bien à vous, TEFACORP

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Quelques notes pour faire plus propre :

    Un Toplevel n'as pas besoin de mainloop.

    Si tu n'as pas besoin de le nommer par la suite pas besoin de donner un nom a tes Widgets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # Création des boutons de commencement du jeu
    bouton_nouvelle_partie=Button(fenetredebut, text="Débuter une nouvelle partie",command=nouvelle_partie) 
    bouton_charger_partie=Button(fenetredebut, text="Charger partie")#,command=charger_partie; Fonctionnalité de P5
    bouton_supprimmer_partie=Button(fenetredebut, text="Supprimer partie", command = lambda : supprimer_partie(fenetredebut)) 
    bouton_quitter_jeux=Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy) 
     
     
    ### Mise en page des boutons et canvas de l'image
    bouton_nouvelle_partie.grid(row =2,sticky =E )
    bouton_charger_partie.grid(row =3, sticky =E)
    bouton_supprimmer_partie.grid(row =4, sticky =E)
    bouton_quitter_jeux.grid(row =5, sticky =E)
    Deviens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Création des boutons de commencement du jeu
    Button(fenetredebut, text="Débuter une nouvelle partie", command=nouvelle_partie).grid(row=2, sticky=E)
    Button(fenetredebut, text="Charger partie", command=...).grid(row=3, sticky=E)
    Button(fenetredebut, text="Supprimer partie", command = lambda : supprimer_partie(fenetredebut)).grid(row=4, sticky=E)
    Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy).grid(row=5, sticky=E)
    Pourquoi le return à la fin de supprimer_partie alors que tu ne retourne rien ? Je le vois souvent dans les codes mais je ne m'en explique pas l'utilité.
    Soit tu as une fonction de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def unefonc(a):
        b=a*3
        return b
    ou tu as besoin de b
    Soit tu a une procédure de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def uneproc():
        root.destroy()
    Et la pas la peine de mettre return. Cela retourneras toujours None.

    Mais je vois que tu avance. Pense a regarder le chapitre 13 que je t'ai conseiller dés que tu te le sentiras. Cela te permettras de faire quelque chose de bien plus propre.

    Bon code.
    Merci d'utiliser le forum pour les questions techniques.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. visibilité des variables d'un constructeur
    Par med_anis_dk dans le forum Langage
    Réponses: 4
    Dernier message: 06/05/2007, 22h07
  2. Réponses: 6
    Dernier message: 06/04/2007, 15h10
  3. Visibilité des variables
    Par Akhan dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/01/2007, 00h22
  4. problème de visibilité des variables dans un include
    Par d1g-2-d1g dans le forum Langage
    Réponses: 6
    Dernier message: 28/11/2005, 10h35
  5. [EasyPHP] problème de visibilité des variable dans les includes
    Par d1g-2-d1g dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 23/10/2005, 02h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo