Variable globale Tkinter

Fermé
yassi42 Messages postés 5 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 4 mars 2014 - 15 janv. 2014 à 23:12
yassi42 Messages postés 5 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 4 mars 2014 - 18 janv. 2014 à 12:43
Bonsoir,
J'essaie de créer un programme pour jouer au jeu de "papier caillou ciseaux" avec une interface graphique (tkinter) mais je suis face a un problème qu je n'arrive pas a résoudre depuis un bon moment:
Je souhaiterai faire afficher le cumul des points (sur PLUSIEURS JEUX) du joueur et du PC dans la fenêtre tkinter mais impossible j'ai essayé avec des variables globales mais ça ne marche pas. j'espère que quelqu'un voit ou es que je me trompe :-)
Merci
import random
from tkinter import*
 
 
def jeu(joueur1):
    global pointjoueur
    global pointPC
    pointPC=0
    pointjoueur=0
 
 
    PC=random.randint(1,3)
    PC=int(PC)
 
    if (joueur1==1) :
            if (PC==1) :
                print("égalité")
            elif (PC==2) :
                print("Vous gagnez")
                pointjoueur=pointjoueur+1
            else:
                 print("Vous perdez")
                 pointPC=pointPC+1
 
    elif (joueur1==2) :
            if PC==2 :
                print("égalité")
            elif PC==3 :
                print("Vous gagnez")
                pointjoueur=pointjoueur+1
            else:
                 print("Vous perdez")
                 pointPC=pointPC+1
 
    else:
            if PC==3 :
                print("égalité")
            elif PC==2 :
                print("Vous gagnez")
                pointjoueur=pointjoueur+1
            else:
                 print("Vous perdez")
                 pointPC=pointPC+1
 
    print('Vos points:',pointjoueur)
    print('points du PC:',pointPC)
    print()
 
 
fen1= Tk()
fen1.title('Papier Caillou Ciseaux')
 
tex1=Label(fen1, text='Choisissez votre action !')
tex1.pack()
bout1=Button(fen1, text='papier', command=(lambda:jeu(1)))
bout1.pack()
bout2=Button(fen1, text='cailloux', command=(lambda:jeu(2)))
bout2.pack()
bout3=Button(fen1, text='ciseau', command=(lambda:jeu(3)))
bout3.pack()
bout4 = Button(fen1, text="Quitter", command =fen1.destroy)
bout4.pack()
chaine = Label(fen1)
chaine.pack()
tex2 = Label(fen1, text=pointjoueur)
tex2.pack()
tex4 = Label(fen1, text=pointPC)
tex4.pack()
 
fen1.config(background=('#336633'))
fen1.geometry('200x200')
 
fen1.mainloop()

2 réponses

nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 18/01/2014 à 12:29
Bonjour!
Pour qu'une variable soit globale à tout le programme, il faut la déclarer dans le corps du programme et non dans une fonction.
Ça ferait quelque chose comme ça (en supposant que pointPC soit ta variable) :
pointPC=0
def jeu(joueur1):
    global pointPC
    # et ici, tu n'initialises pas ta variable pointPC à 0

Voilà! Mais n'oublie pas que les variables globales ne sont pas toujours le meilleur moyen de résoudre ce genre de problème. Les classes peuvent palier ce genre de problème! =)
ps: par contre, j'ai pas pu tester, car j'ai pas tkinter sous la main...
Edit: j'ai testé sans tkinter, et ça semble fonctionner...
2