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
| #!/usr/bin/env python
# -*- coding: utf-8 -*-
from Tkinter import *
import random
class cJeu(Tk):
# Variables statiques
__liste=["cochon", "renard", "abeille", "poule"]
# Constructeur
def __init__(self):
# Création de l'objet par appel de la méthode init héritée de l'objet d'origine
Tk.__init__(self)
# Initialisation variables de jeu
self.__hiddenObj=None # Objet caché
# Mise en forme
self.title('Petit jeu')
self.geometry('500x150+400+400')
# Création d'un widget d'affichage liste
self.__listLabel=cJeu.cLabel(
self,
text=", ".join(x for x in cJeu.__liste),
fg='red',
bg='white',
)
self.__listLabel.pack(side=TOP, padx=0, pady=5, fill=Y)
# L'espace de rangement des boutons
btnFrame=Frame(self)
btnFrame.pack(side=TOP, fill=Y, padx=0, pady=5)
# Création du bouton "jouer"
Button(
btnFrame,
text='Jouer',
command=self.__cacheElem,
).pack(side=LEFT, padx=5, pady=0)
# Création du bouton "quitter"
Button(
btnFrame,
text='Quitter',
command=self.destroy,
).pack(side=RIGHT, padx=5, pady=0)
# Création d'un widget de saisie
self.__listSaisie=cJeu.cEntry(
self,
fg='blue',
bg='white',
)
self.__listSaisie.pack(side=TOP, fill=Y, padx=0, pady=5)
# Création d'un widget d'affichage résultat
self.__listResult=cJeu.cLabel(
self,
fg='blue',
bg='white',
)
self.__listResult.pack(side=TOP, fill=Y, padx=0, pady=5)
# __init__()
# Suppression d'un élément
def __cacheElem(self):
self.__hiddenObj=random.choice(cJeu.__liste)
self.__listLabel.set_text(
", ".join(x for x in cJeu.__liste if x != self.__hiddenObj)
)
# __cacheElem()
# Vérification saisie
def Verif(self, event):
# S'il n'y a pas d'élément caché, on ne joue pas
if self.__hiddenObj is None: return
# Affichage gagné/perdu selon l'élément saisi
self.__listResult.set_text(
"Gagné"\
if self.__listSaisie.get_text() == self.__hiddenObj\
else "Perdu"
)
# Verif()
# Une classe pour gérer un label avec son texte
class cLabel(Label):
# Constructeur
def __init__(self, parent, *args, **kwargs):
# Mémorisation widget parente
self.__parent=parent
# Le texte
self.__texte=StringVar()
# Création de l'objet par appel de la méthode init héritée de l'objet d'origine
Label.__init__(
self,
textvariable=self.__texte,
*args,
**kwargs
)
# S'il y a un texte à afficher
if "text" in kwargs.keys() and kwargs["text"] is not None:
self.set_text(kwargs["text"])
# __init__()
# Positionnement texte
def set_text(self, texte): self.__texte.set(texte)
# class cLabel
# Une classe pour gérer une saisie avec son texte
class cEntry(Entry):
# Constructeur
def __init__(self, parent, *args, **kwargs):
# Mémorisation widget parente
self.__parent=parent
# Le texte
self.__texte=StringVar()
# Création de l'objet par appel de la méthode init héritée de l'objet d'origine
Entry.__init__(
self,
textvariable=self.__texte,
*args,
**kwargs
)
# L'appui sur return déclenchera la vérification
self.bind('<Key-Return>', self.__parent.Verif)
# __init__()
# Récupération saisie
def get_text(self): return self.__texte.get()
# class cEntry
# class cJeu
cJeu().mainloop() |
Partager