begin process at 2012 02 05 00:31:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > SIMULATION DE LOTO

SIMULATION DE LOTO


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Classé sous :aéra, group, loto, jeux, wxpython Niveau :Débutant Date de création :08/05/2007 Date de mise à jour :09/05/2007 12:26:49 Vu / téléchargé :9 270 / 264

Auteur : aera group

Ecrire un message privé
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
C'est un petit programme permetant de simulé un lancer de loto. Pour cela il fait appel un un module nommé "Loto". Tout le reste, c'est de l'interface graphique et de la gestion des profils des joueurs. Le principe du jeu n'est pas très interressant, je vous l'accorde, mais c'est pour montre un peut la gestion des fichier sous Python, et encore montrer quelques Widget présent dans WxPython. Je met, le code ici pour que ce qui ne sont pas inscrit puisse  en profité, mais il faut savoir qu'il ne fonctionnera pas : il vous manquera le module et quelques fichiers et images pour le faire fonctionner correctement.

Source

  • import wx
  • import Loto
  • import os
  • import time
  • import locale
  • import wx.html as html
  • import wx.lib.hyperlink as hl
  • provider = wx.SimpleHelpProvider()
  • wx.HelpProvider_Set(provider)
  • class Aide(wx.Frame):
  • def __init__(self, parent, path):
  • wx.Frame.__init__(self, parent, -1,"Aide sur le jeu", size=wx.Size(700,610))
  • self.SetIcon(wx.Icon("Loto-data\Icone2.ico", wx.BITMAP_TYPE_ICO ))
  • self.path = path
  • self.html = html.HtmlWindow(self, -1, style=wx.NO_FULL_REPAINT_ON_RESIZE)
  • self.printer = html.HtmlEasyPrinting()
  • self.box = wx.BoxSizer(wx.VERTICAL)
  • self.box.Add(self.html, 1, wx.GROW)
  • self.SetSizer(self.box)
  • self.SetAutoLayout(True)
  • self.Home(None)
  • def Home(self, event):
  • self.html.LoadPage(self.path)
  • class Dialog_Compare(wx.Dialog):
  • def __init__(
  • self, parent, ID, title,li1,li11,li2,li22,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition,
  • style=wx.DEFAULT_DIALOG_STYLE
  • ):
  • pre = wx.PreDialog()
  • pre.Create(parent, ID, title, pos, size, style)
  • self.PostCreate(pre)
  • sizer = wx.BoxSizer(wx.VERTICAL)
  • ti=wx.StaticText(self, -1, "Analise des résultats")
  • texte1=""
  • i=0
  • while i<len(li1):
  • if i==len(li1)-1:
  • texte1=texte1 + " et le " + str(li1[i])
  • else:
  • texte1=texte1 + " le " + str(li1[i]) +','
  • i=i+1
  • t0=wx.StaticText(self, -1, "Vous avez joué pour le premier tirage" + texte1)
  • texte1=""
  • i=0
  • while i<len(li11):
  • if i==len(li11)-1:
  • texte1=texte1 + " et le " + str(li11[i])
  • else:
  • texte1=texte1 + " le " + str(li11[i]) +','
  • i=i+1
  • t1=wx.StaticText(self, -1, "Les numéro gagnant sont" + texte1)
  • g1=0
  • i=0
  • while i<len(li1):
  • if li1[i] in li11:
  • g1=g1+1
  • i=i+1
  • t2=wx.StaticText(self, -1, "Vous avez " + str(g1) + " numéro(s) en commun")
  • line1 = wx.StaticLine(self, -1, size=(20,-1), style=wx.LI_HORIZONTAL)
  • texte1=""
  • i=0
  • while i<len(li2):
  • if i==len(li2)-1:
  • texte1=texte1 + " et le " + str(li2[i])
  • else:
  • texte1=texte1 + " le " + str(li2[i]) +','
  • i=i+1
  • t3=wx.StaticText(self, -1, "Vous avez joué pour le deuxième tirage" + texte1)
  • texte1=""
  • i=0
  • while i<len(li22):
  • if i==len(li22)-1:
  • texte1=texte1 + " et le " + str(li22[i])
  • else:
  • texte1=texte1 + " le " + str(li22[i]) +','
  • i=i+1
  • t4=wx.StaticText(self, -1, "Les numéro gagnant sont" + texte1)
  • g2=0
  • i=0
  • while i<len(li2):
  • if li2[i] in li22:
  • g2=g2+1
  • i=i+1
  • t5=wx.StaticText(self, -1, "Vous avez " + str(g2) + " numéro(s) en commun")
  • nom='Loto-data\info'+joueur
  • f=open(nom,'r')
  • l1=f.readline()
  • l2=f.readline()
  • l3=f.readline()
  • l4=f.readline()
  • f.close()
  • l2=int(l2)+1
  • l3=int(l3)+g1+g2
  • nom='Loto-data\info'+joueur
  • f=open(nom,'w')
  • locale.setlocale(locale.LC_ALL,'')
  • temp=time.strftime('Le %A %d %B %Y ; %H h %M min et %S s')
  • contenu=str(l1)+str(l2)+'\n'+str(l3)+'\n'+temp
  • f.write(contenu)
  • f.close()
  • sizer.Add(ti,0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(t0,0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(t1,0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(t2,0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(line1,0, wx.GROW|wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(t3,0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(t4,0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(t5,0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • btnsizer = wx.StdDialogButtonSizer()
  • if wx.Platform != "__WXMSW__":
  • btn = wx.ContextHelpButton(self)
  • self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • btn = wx.Button(self, wx.ID_OK,u"OK")
  • sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)
  • self.SetSizer(sizer)
  • sizer.Fit(self)
  • class Dialog_InfoJoueur(wx.Dialog):
  • def __init__(
  • self, parent, ID, title,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition,
  • style=wx.DEFAULT_DIALOG_STYLE
  • ):
  • pre = wx.PreDialog()
  • pre.Create(parent, ID, title, pos, size, style)
  • self.PostCreate(pre)
  • sizer = wx.BoxSizer(wx.VERTICAL)
  • ti="Imformation sur le joueur : " + joueur +'\n'
  • titre=wx.StaticText(self, -1, ti)
  • fichier="Loto-Data\info"+joueur
  • f=open(fichier,"r")
  • l1=f.readline()
  • if l1=="0\n" or l1=="0":
  • st=" Normal"
  • elif l1=="1\n" or l1=="1":
  • st=" Privilégié"
  • else:
  • st=" Défavorisé"
  • l2=f.readline()
  • nbj=" "+str(l2)
  • l3=f.readline()
  • nbg=" "+str(l3)
  • j=int(l2)
  • g=int(l3)
  • nbp=str(j*12-g)
  • l4=f.readline()
  • if l4=="0" or l4=="0\n":
  • du=" N'a jamais joué"
  • else :
  • du= " "+str(l4)
  • f.close()
  • t0=wx.StaticText(self, -1, "Statut du joueur :\n")
  • t1=wx.StaticText(self, -1, "Nombre de jeux :\n")
  • t2=wx.StaticText(self, -1, "Nombre de numéro trouvé :\n")
  • t3=wx.StaticText(self, -1, "Nombre de numéro perdu :\n")
  • t4=wx.StaticText(self, -1, "Dernière utilisation :")
  • t10=wx.StaticText(self, -1, st)
  • t11=wx.StaticText(self, -1, nbj)
  • t12=wx.StaticText(self, -1, nbg)
  • t13=wx.StaticText(self, -1, nbp)
  • t14=wx.StaticText(self, -1, du)
  • sizer.Add(titre, wx.ALIGN_CENTRE|wx.ALL, 5)
  • box0 = wx.BoxSizer(wx.HORIZONTAL)
  • box1 = wx.BoxSizer(wx.VERTICAL)
  • box1.Add(t0, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
  • box1.Add(t1, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
  • box1.Add(t2, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
  • box1.Add(t3, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
  • box1.Add(t4, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
  • box2 = wx.BoxSizer(wx.VERTICAL)
  • box2.Add(t10, 1, wx.ALIGN_LEFT|wx.ALL, 1)
  • box2.Add(t11, 1, wx.ALIGN_LEFT|wx.ALL, 1)
  • box2.Add(t12, 1, wx.ALIGN_LEFT|wx.ALL, 1)
  • box2.Add(t13, 1, wx.ALIGN_LEFT|wx.ALL, 1)
  • box2.Add(t14, 1, wx.ALIGN_LEFT|wx.ALL, 1)
  • box0.Add(box1, 1, wx.ALIGN_CENTRE|wx.ALL, 1)
  • box0.Add(box2, 1, wx.ALIGN_CENTRE|wx.ALL, 1)
  • sizer.Add(box0, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • btnsizer = wx.StdDialogButtonSizer()
  • if wx.Platform != "__WXMSW__":
  • btn = wx.ContextHelpButton(self)
  • self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • btn = wx.Button(self, wx.ID_OK,u"OK")
  • sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)
  • self.SetSizer(sizer)
  • sizer.Fit(self)
  • class Dialog_Tirage(wx.Dialog):
  • def __init__(
  • self, parent, ID, title,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition,
  • style=wx.DEFAULT_DIALOG_STYLE
  • ):
  • self.joueur=joueur
  • self.parent=parent
  • self.numero1=[]
  • self.numero2=[]
  • pre = wx.PreDialog()
  • pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
  • pre.Create(parent, ID, title, pos, size, style)
  • self.PostCreate(pre)
  • sizer = wx.BoxSizer(wx.VERTICAL)
  • liste=[]
  • i=1
  • while i<50:
  • liste.append(str(i))
  • i=i+1
  • t1=wx.StaticText(self, -1, "Premier Tirage")
  • self.cl1 = wx.CheckListBox(self, -1, (80, 50), wx.DefaultSize, liste)
  • self.cl1.SetHelpText("Sélectionner dans cette liste, les 6 numéros que vous voullez jouer")
  • self.info1=wx.StaticText(self, -1, "Vous avez choisi 0 numéro(s) sur 6 pour le premier tirage")
  • self.info1.SetHelpText("Une fois que vous aurez sélectionné les 12 numéros (6 par tirage - Il y a 2 tirages donc 2 × 6 = 12), le bouton ''Valider'' s'active")
  • t2=wx.StaticText(self, -1, "Deuxième Tirage")
  • self.cl2 = wx.CheckListBox(self, -1, (80, 50), wx.DefaultSize, liste)
  • self.cl2.SetHelpText("Sélectionner dans cette liste, les 6 numéros que vous voullez jouer")
  • self.b = wx.Button(self, -1, "Valider")
  • self.b.Enable(False)
  • self.b.SetHelpText("Jouer au Loto : Regardez le tirage")
  • self.b.SetDefault()
  • self.info2=wx.StaticText(self, -1, "Vous avez choisi 0 numéro(s) sur 6 pour le second tirage")
  • self.info2.SetHelpText("Une fois que vous aurez sélectionné les 12 numéros (6 par tirage - Il y a 2 tirages donc 2×6 = 12), le bouton ''Valider'' s'active")
  • line1 = wx.StaticLine(self, -1, size=(-1,-1), style=wx.LI_VERTICAL)
  • t3=wx.StaticText(self, -1, "Dans cette simulation, l'ordre n'a pas d'improtance")
  • t3.SetHelpText("Normalement il faut les trouver dans le même ordre mais bon, ici ont va faire l'impasse")
  • box0 = wx.BoxSizer(wx.HORIZONTAL)
  • box1 = wx.BoxSizer(wx.VERTICAL)
  • box2 = wx.BoxSizer(wx.VERTICAL)
  • box1.Add(t1, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
  • box1.Add(self.cl1, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
  • box2.Add(t2, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
  • box2.Add(self.cl2, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
  • box0.Add(box1, 1, wx.ALIGN_LEFT|wx.ALL, 1)
  • box0.Add(line1, 1, wx.ALIGN_CENTRE|wx.ALL, 1)
  • box0.Add(box2, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
  • box = wx.StaticBox(self, -1, u"Information")
  • bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
  • bsizer.Add(self.info1, 0, wx.CENTER, 10)
  • bsizer.Add(self.info2, 0, wx.CENTER, 10)
  • sizer.Add(box0, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(t3, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(bsizer, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(self.b, 0, wx.ALIGN_CENTRE, 5)
  • self.Bind(wx.EVT_CHECKLISTBOX, self.choix1, self.cl1)
  • self.Bind(wx.EVT_CHECKLISTBOX, self.choix2, self.cl2)
  • self.Bind(wx.EVT_BUTTON, self.valide, self.b)
  • btnsizer = wx.StdDialogButtonSizer()
  • if wx.Platform != "__WXMSW__":
  • btn = wx.ContextHelpButton(self)
  • self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
  • btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
  • sizer.Add(btn, 0, wx.ALL|wx.CENTER, 4)
  • sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)
  • self.SetSizer(sizer)
  • sizer.Fit(self)
  • def choix1(self, event):
  • index = event.GetSelection()
  • label = self.cl1.GetString(index)
  • if self.cl1.IsChecked(index):
  • self.numero1.append(int(label))
  • else:
  • self.numero1.remove(int(label))
  • if len(self.numero1)==6 and len(self.numero2)==6:
  • self.b.Enable(True)
  • else:
  • self.b.Enable(False)
  • texte="Vous avez choisi " + str(len(self.numero1)) + " numéro(s) sur 6 pour le premier tirage"
  • self.info1.SetLabel(texte)
  • def choix2(self, event):
  • index = event.GetSelection()
  • label = self.cl2.GetString(index)
  • if self.cl2.IsChecked(index):
  • self.numero2.append(int(label))
  • else:
  • self.numero2.remove(int(label))
  • if len(self.numero1)==6 and len(self.numero2)==6:
  • self.b.Enable(True)
  • else:
  • self.b.Enable(False)
  • texte="Vous avez choisi " + str(len(self.numero2)) + " numéro(s) sur 6 pour le second tirage"
  • self.info2.SetLabel(texte)
  • def valide(self, evt):
  • self.Destroy()
  • nom='Loto-data\info'+self.joueur
  • f=open(nom,'r')
  • lignen1=f.readline()
  • f.close()
  • lignen1=int(lignen1)
  • Frame.tirage(self.parent,lignen1,self.numero1,self.numero2,None)
  • class Dialog_About(wx.Dialog):
  • def __init__(
  • self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition,
  • style=wx.DEFAULT_DIALOG_STYLE
  • ):
  • pre = wx.PreDialog()
  • pre.Create(parent, ID, title, pos, size, style)
  • self.PostCreate(pre)
  • sizer = wx.BoxSizer(wx.VERTICAL)
  • bmp = wx.Bitmap("Loto-data\Aeragroup.bmp", wx.BITMAP_TYPE_BMP)
  • image=wx.StaticBitmap(self, -1, bmp, (80, 50), (bmp.GetWidth(), bmp.GetHeight()))
  • textaprop=u"""
  • À propos de ce programme :
  • _____________________________
  • Créé par Aéra Group pour code-SourceS.
  • Version 1.0 ; Licence : Libre. Vous pouvez modifier ce que vous souhaité."""
  • label = wx.StaticText(self, -1, textaprop)
  • hyper = hl.HyperLinkCtrl(self, wx.ID_ANY, "Source déposé sur Python-France",
  • URL="http://www.pythonfrance.com/")
  • sizer.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(hyper, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • sizer.Add(image, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • btnsizer = wx.StdDialogButtonSizer()
  • if wx.Platform != "__WXMSW__":
  • btn = wx.ContextHelpButton(self)
  • self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • btn = wx.Button(self, wx.ID_OK,u"OK")
  • btn.SetDefault()
  • sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)
  • self.SetSizer(sizer)
  • sizer.Fit(self)
  • class Dialog_Joueur(wx.Dialog):
  • def __init__(
  • self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition,
  • style=wx.DEFAULT_DIALOG_STYLE
  • ):
  • pre = wx.PreDialog()
  • pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
  • pre.Create(parent, ID, title, pos, size, style)
  • self.PostCreate(pre)
  • sizer = wx.BoxSizer(wx.VERTICAL)
  • text = wx.StaticText(self, -1, "Le choix d'un joueur permet d'enregister les parramètres et les résultats d'un joueur")
  • text.SetSize(text.GetBestSize())
  • text.SetHelpText("Le joueur doit être déja enregistrer")
  • f=open("Loto-data\Utilisateur.txt","r")
  • l1=f.readline()
  • l1=eval(l1)
  • f.close()
  • self.joueur=l1[0]
  • self.ch = wx.Choice(self, -1, (400, 50), choices = l1)
  • self.ch.SetSelection(0)
  • self.ch.SetHelpText("Permet de sélectionner un joueur déja enregistrer")
  • b = wx.Button(self, -1, "Sélectionner ce joueur")
  • b.SetHelpText("Valide votre choix")
  • b.SetDefault()
  • sizer.Add(text, 0, wx.ALIGN_CENTRE|wx.ALL|wx.TOP, 5)
  • sizer.Add(self.ch, 10, wx.ALIGN_CENTRE|wx.ALL|wx.GROW, 10)
  • sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • self.Bind(wx.EVT_CHOICE, self.choix, self.ch)
  • self.Bind(wx.EVT_BUTTON, self.valide, b)
  • btnsizer = wx.StdDialogButtonSizer()
  • if wx.Platform != "__WXMSW__":
  • btn = wx.ContextHelpButton(self)
  • self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
  • btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
  • sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)
  • self.SetSizer(sizer)
  • sizer.Fit(self)
  • def choix(self, event):
  • self.joueur=event.GetString()
  • def valide(self, evt):
  • Frame.nom_joueur(frame,self.joueur.encode("windows-1252"))
  • self.Destroy()
  • dia=wx.MessageDialog(self, "Joueur actuel : " + self.joueur.encode("windows-1252"), caption = u"Confirmation", style = wx.OK|wx.ICON_INFORMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • class Dialog_Nouveau(wx.Dialog):
  • def __init__(
  • self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition,
  • style=wx.DEFAULT_DIALOG_STYLE
  • ):
  • pre = wx.PreDialog()
  • pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
  • pre.Create(parent, ID, title, pos, size, style)
  • self.PostCreate(pre)
  • sizer = wx.BoxSizer(wx.VERTICAL)
  • box = wx.BoxSizer(wx.HORIZONTAL)
  • label = wx.StaticText(self, -1, "Enter le nom du nouveau joueur")
  • label.SetHelpText("Un nouveau joueur permet d'enregistrer son score")
  • box.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • self.text = wx.TextCtrl(self, -1, "", size=(180,-1))
  • self.text.SetHelpText("Taper ici son nom. N'utilisez pas un nom déja utilisé même en jouant avec les majuscules")
  • box.Add(self.text, 1, wx.ALIGN_CENTRE|wx.ALL, 5)
  • b = wx.Button(self, -1, "Ajouter ce joueur")
  • b.SetHelpText("Ce bouton permet de créé un nouveau joueur")
  • b.SetDefault()
  • sizer.Add(box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
  • sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • self.Bind(wx.EVT_BUTTON, self.valide, b)
  • btnsizer = wx.StdDialogButtonSizer()
  • if wx.Platform != "__WXMSW__":
  • btn = wx.ContextHelpButton(self)
  • self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • btn = wx.Button(self, wx.ID_CANCEL,u"Fermer cette fenêtre")
  • btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
  • sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)
  • self.SetSizer(sizer)
  • sizer.Fit(self)
  • def valide(self,evt):
  • if self.text.GetValue()=="":
  • dia=wx.MessageDialog(self, "Vous n'avez rien inscrit dans le champs d'enter", caption = u"Pas de nom", style = wx.OK|wx.ICON_ERROR,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • else:
  • try:
  • f=open("Loto-data\Utilisateur.txt","r")
  • except:
  • dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt.", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • self.Destroy()
  • else:
  • l1=f.readline()
  • l1=eval(l1)
  • f.close()
  • i=0
  • l2=[]
  • while i<len(l1):
  • l2.append(l1[i].lower())
  • i=i+1
  • if self.text.GetValue().lower() in l2:
  • dia=wx.MessageDialog(self, "Ce nom existe déja. Chosiser en un autre", caption = u"Nom déja enregister", style = wx.OK|wx.wx.ICON_EXCLAMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • elif ' \ '.strip() in self.text.GetValue() or ' / '.strip() in self.text.GetValue() or ':' in self.text.GetValue() or '*' in self.text.GetValue() or '?' in self.text.GetValue() or '"' in self.text.GetValue() or '<' in self.text.GetValue() or '>' in self.text.GetValue() or '|' in self.text.GetValue():
  • dia=wx.MessageDialog(self, 'Ce nom comporte un carractère interdit.\nVoici la liste des carractères interdit : / \ : * ? " < > |', caption = u"Carractère interdit", style = wx.OK|wx.wx.ICON_EXCLAMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • else:
  • l1.append(self.text.GetValue())
  • l1=str(l1)
  • f=open("Loto-data\Utilisateur.txt","w")
  • f.write(l1.encode("windows-1252"))
  • f.close()
  • nom="Loto-data\info"+self.text.GetValue()
  • f=open(nom,"w")
  • f.write('0\n0\n0\n0')
  • f.close()
  • dia=wx.MessageDialog(self, "Le joueur " + self.text.GetValue().encode("windows-1252") + " à bien éait ajouter", caption = u"Confirmation", style = wx.OK|wx.ICON_INFORMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • self.text.Clear()
  • class Dialog_Suprime(wx.Dialog):
  • def __init__(
  • self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition,
  • style=wx.DEFAULT_DIALOG_STYLE
  • ):
  • pre = wx.PreDialog()
  • pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
  • pre.Create(parent, ID, title, pos, size, style)
  • self.PostCreate(pre)
  • sizer = wx.BoxSizer(wx.VERTICAL)
  • text = wx.StaticText(self, -1, "ATTENTION : LA SUPPRESSION EST DÉFINITIVE ET LA RÉCUPÉRATION DES FICHIER SUPPRIMÉ EST IMPOSSIBLE")
  • text.SetSize(text.GetBestSize())
  • text.SetHelpText("La suppression entraine la destruction des fichiers de sauvegardes")
  • f=open("Loto-data\Utilisateur.txt","r")
  • l1=f.readline()
  • l1=eval(l1)
  • f.close()
  • self.joueur=l1[0]
  • self.ch = wx.Choice(self, -1, (400, 50), choices = l1)
  • self.ch.SetSelection(0)
  • self.ch.SetHelpText("Permet de sélectionner le joueur à supprimer")
  • b = wx.Button(self, -1, "Supprimer ce joueur")
  • b.SetHelpText("Permet de valider votre choix")
  • sizer.Add(text, 0, wx.ALIGN_CENTRE|wx.ALL|wx.TOP, 5)
  • sizer.Add(self.ch, 10, wx.ALIGN_CENTRE|wx.ALL|wx.GROW, 10)
  • sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  • self.Bind(wx.EVT_CHOICE, self.choix, self.ch)
  • self.Bind(wx.EVT_BUTTON, self.valide, b)
  • btnsizer = wx.StdDialogButtonSizer()
  • if wx.Platform != "__WXMSW__":
  • btn = wx.ContextHelpButton(self)
  • self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
  • btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
  • btn.SetDefault()
  • sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
  • sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)
  • self.SetSizer(sizer)
  • sizer.Fit(self)
  • def choix(self, event):
  • self.joueur = event.GetString()
  • def valide(self,evt):
  • dia=wx.MessageDialog(self, 'Êtes vous sûr de vouloir supprimer le joueur ' + self.joueur.encode("windows-1252") + ' ?', caption = u"Confirmation", style = wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • if valeur == wx.ID_YES:
  • f=open("Loto-data\Utilisateur.txt","r")
  • l1=f.readline()
  • l1=eval(l1)
  • f.close()
  • l1.remove(self.joueur)
  • f=open("Loto-data\Utilisateur.txt","w")
  • l1=str(l1).encode("windows-1252")
  • f.write(l1)
  • f.close()
  • nom="Loto-data\info"+self.joueur
  • try:
  • os.remove(nom)
  • except:
  • pass
  • dia=wx.MessageDialog(self, "Le joueur " + self.joueur.encode("windows-1252") + ' a bien été supprimer', caption = u"Confirmation de suppression", style = wx.OK|wx.ICON_INFORMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • j=Frame.renvoie_joueur(frame)
  • if self.joueur.encode("windows-1252")==j:
  • Frame.nom_joueur(frame,'[Pas de joueur sélectionné]')
  • self.Destroy()
  • else:
  • dia=wx.MessageDialog(self, "La procédure de suppression a été annulé", caption = u"Opération annuler", style = wx.OK|wx.ICON_INFORMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • class Frame(wx.Frame):
  • """Affiche une fenêtre"""
  • def __init__(self, parent, title):
  • wx.Frame.__init__(self, parent, -1, title, size=(800, 700))
  • self.SetIcon(wx.Icon("Loto-data\Icone.ico", wx.BITMAP_TYPE_ICO ))
  • self.Bind(wx.EVT_CLOSE, self.quitter)
  • menuBar = wx.MenuBar()
  • menu = wx.Menu()
  • menu.Append(11, "Nouveau\tCtrl+N", "Ouvrir une nouvelle fenêtre")
  • menu.Append(12, "Effectuer un tirage", "Joué au Loto")
  • menu.AppendSeparator()
  • menu.Append(13, "Quitter\tAlt-F4", "Quitter le programme")
  • joueur = wx.Menu()
  • joueur.Append(21, "Choisir un/Changer de joueur", "Chosir un joueur pour l'enregistrement des paramètres")
  • joueur.Append(22, "Ajouter un nouveau joueur", "Ajouter un joueur à la base de donnée")
  • joueur.Append(23, "Supprimer un joueur", "Supprimer un joueur à la base de donnée ainsi que ses sauvegardes")
  • joueur.AppendSeparator()
  • joueur.Append(24, "Voir les statistiques de ce joueur", "Voir ne nombre de jeux, de victoires et de défaites")
  • aide = wx.Menu()
  • aide.Append(31, "Aide\tF1", "Permet d'optenir de l'aide sur le jeu")
  • aide.Append(32, "À propos de ...\tF2","Information sur le programme")
  • self.Bind(wx.EVT_MENU, self.nouveau, id=11)
  • self.Bind(wx.EVT_MENU, self.pre_tirage, id=12)
  • self.Bind(wx.EVT_MENU, self.quitter, id=13)
  • self.Bind(wx.EVT_MENU, self.definir_joueur, id=21)
  • self.Bind(wx.EVT_MENU, self.nouveau_joueur, id=22)
  • self.Bind(wx.EVT_MENU, self.supprimer_joueur, id=23)
  • self.Bind(wx.EVT_MENU, self.info_joueur, id=24)
  • self.Bind(wx.EVT_MENU, self.aide, id=31)
  • self.Bind(wx.EVT_MENU, self.about, id=32)
  • menuBar.Append(menu, "Fichier")
  • menuBar.Append(joueur, "Action Joueur")
  • menuBar.Append(aide, "Aide")
  • self.SetMenuBar(menuBar)
  • self.CreateStatusBar()
  • self.joueur_actuel='[Pas de joueur sélectionné]'
  • self.nb_tirage=0
  • panel = wx.Panel(self)
  • text = wx.StaticText(panel, -1, "Tirage du Loto")
  • text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
  • text.SetSize(text.GetBestSize())
  • btn = wx.Button(panel, -1, "Quitter")
  • funbtn = wx.Button(panel, -1, "Effectuer un tirage")
  • self.t = wx.TextCtrl(panel, -1,"",size=(700, 400), style=wx.TE_MULTILINE|wx.TE_READONLY)
  • self.Bind(wx.EVT_BUTTON, self.quitter, btn)
  • self.Bind(wx.EVT_BUTTON, self.pre_tirage, funbtn)
  • sizer = wx.BoxSizer(wx.VERTICAL)
  • sizer.Add(text, 0, wx.ALL|wx.CENTER, 10)
  • sizer.Add(btn, 0, wx.ALL|wx.CENTER, 10)
  • sizer.Add(funbtn, 0, wx.ALL|wx.CENTER, 10)
  • sizer.Add(self.t, 0, wx.ALL|wx.CENTER, 10)
  • panel.SetSizer(sizer)
  • panel.Layout()
  • self.Center()
  • funbtn.SetDefault()
  • def quitter(self, evt):
  • dlg = wx.MessageDialog(self, 'Êtes vous sûr de voulloir quitter "Le trirage du Loto"' ,'Quitter ce programme', wx.YES_NO|wx.ICON_QUESTION)
  • reponse = dlg.ShowModal()
  • if reponse==wx.ID_YES:
  • self.Destroy()
  • def pre_tirage(self,evt):
  • if self.joueur_actuel== "[Pas de joueur sélectionné]":
  • a=self.definir_joueur(None)
  • if a!=wx.ID_CANCEL:
  • dlg = Dialog_Tirage(self, -1, "Sélection des numéros",self.joueur_actuel, size=(350, 200),
  • style = wx.DEFAULT_DIALOG_STYLE)
  • dlg.CenterOnScreen()
  • val = dlg.ShowModal()
  • else:
  • dlg = Dialog_Tirage(self, -1, "Sélection des numéros",self.joueur_actuel, size=(350, 200),
  • style = wx.DEFAULT_DIALOG_STYLE)
  • dlg.CenterOnScreen()
  • val = dlg.ShowModal()
  • def tirage(self,triche,boules_tire1,boules_tire2,evt=None):
  • self.nb_tirage=self.nb_tirage+1
  • texte="Boujours est bienvenu au tirage du loto !!!\n\n\nEt voici le premier tirage\n"
  • if triche==2:
  • Loto.tirage(boules_tire1)
  • boules_tire11=[]
  • i=0
  • while i<len(boules_tire1):
  • boules_tire11.append(boules_tire1[i])
  • i=i+1
  • del boules_tire1[6:len(boules_tire1)]
  • del boules_tire11[0:6]
  • elif triche==1:
  • Loto.tirage(boules_tire1)
  • boules_tire11=boules_tire1
  • del boules_tire11[6:len(boules_tire1)]
  • else:
  • boules_tire11=[]
  • Loto.tirage(boules_tire11)
  • i=0
  • texte1=""
  • while i<len(boules_tire11):
  • if i==len(boules_tire11)-1:
  • texte1=texte1 + " et le numéro complémentaire, le " + str(boules_tire11[i])
  • else:
  • texte1=texte1 + " le " + str(boules_tire11[i]) +','
  • i=i+1
  • texte=texte+"Les numéro gagnant pour ce premier tirage sont le :" + texte1 + "\n\n"
  • texte=texte+"Continuons avec le deuxième tirage\n"
  • if triche==2:
  • Loto.tirage(boules_tire2)
  • boules_tire22=[]
  • i=0
  • while i<len(boules_tire2):
  • boules_tire22.append(boules_tire2[i])
  • i=i+1
  • del boules_tire2[6:len(boules_tire2)]
  • del boules_tire22[0:6]
  • elif triche==1:
  • Loto.tirage(boules_tire2)
  • boules_tire22=boules_tire2
  • del boules_tire22[6:len(boules_tire2)]
  • else:
  • boules_tire22=[]
  • Loto.tirage(boules_tire22)
  • i=0
  • texte2=""
  • while i<len(boules_tire22):
  • if i==len(boules_tire22)-1:
  • texte2=texte2 + " et le numéro complémentaire, le " + str(boules_tire22[i])
  • else:
  • texte2=texte2+ " le " + str(boules_tire22[i]) +','
  • i=i+1
  • texte=texte+"Les numéro gagnant pour ce deuxième tirage sont le :" + texte2 + "\n\n"
  • texte=texte+"_______________________________________________________________________________________________________________\n\n"
  • self.t.SetInsertionPoint(len(self.t.GetValue())+8*self.nb_tirage)
  • self.t.WriteText(texte)
  • dlg = Dialog_Compare(self, -1, "Résultat et analyse",boules_tire1,boules_tire11,boules_tire2,boules_tire22,self.joueur_actuel, size=(350, 200),
  • style = wx.DEFAULT_DIALOG_STYLE)
  • dlg.CenterOnScreen()
  • val = dlg.ShowModal()
  • def definir_joueur(self, evt):
  • try:
  • f=open("Loto-data\Utilisateur.txt","r")
  • f.close()
  • except:
  • dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • return wx.ID_CANCEL
  • else:
  • f=open("Loto-data\Utilisateur.txt","r")
  • l1=f.readline()
  • f.close()
  • if l1=='[]':
  • dia=wx.MessageDialog(self, """Il n'y a aucun joueur enregistré.\nPour enregistrer un joueur allez dans le menu "Action Joueur" et "Ajouter un nouveau joueur" """, caption = u"Pas de joueur", style = wx.OK|wx.ICON_INFORMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • return wx.ID_CANCEL
  • else:
  • dlg = Dialog_Joueur(self, -1, "Sélectionner un joueur", size=(350, 200),
  • style = wx.DEFAULT_DIALOG_STYLE)
  • dlg.CenterOnScreen()
  • val = dlg.ShowModal()
  • return val
  • def nouveau_joueur(self, evt):
  • dlg = Dialog_Nouveau(self, -1, "Ajouter un nouveau joueur", size=(350, 200),
  • style = wx.DEFAULT_DIALOG_STYLE)
  • dlg.CenterOnScreen()
  • val = dlg.ShowModal()
  • def supprimer_joueur(self, evt):
  • try:
  • f=open("Loto-data\Utilisateur.txt","r")
  • f.close()
  • except:
  • dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • else:
  • f=open("Loto-data\Utilisateur.txt","r")
  • l1=f.readline()
  • f.close()
  • if l1=='[]':
  • dia=wx.MessageDialog(self, """Il n'y a aucun joueur enregistré.\nPour enregistrer un joueur allez dans le menu "Action Joueur" et "Ajouter un nouveau joueur" """, caption = u"Pas de joueur", style = wx.OK|wx.ICON_INFORMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • else:
  • dlg = Dialog_Suprime(self, -1, "Supprimer un joueur", size=(350, 200),
  • style = wx.DEFAULT_DIALOG_STYLE)
  • dlg.CenterOnScreen()
  • val = dlg.ShowModal()
  • def aide (self, evt):
  • aide = Aide(self,"Aide.htm")
  • aide.Show(True)
  • def about (self, evt):
  • dlg = Dialog_About(self, -1, "À propos de ...", size=(350, 200),
  • style = wx.DEFAULT_DIALOG_STYLE)
  • dlg.CenterOnScreen()
  • val = dlg.ShowModal()
  • def nom_joueur(self,joueur):
  • if joueur == "[Pas de joueur sélectionné]":
  • self.SetTitle("Tirage du Loto - [Pas de joueur sélectionné]")
  • self.joueur_actuel="[Pas de joueur sélectionné]"
  • else :
  • self.SetTitle("Tirage du Loto - [Joueur : " + joueur + "]")
  • self.joueur_actuel=joueur
  • def renvoie_joueur(self):
  • return self.joueur_actuel
  • def info_joueur(self,evt):
  • if self.joueur_actuel== "[Pas de joueur sélectionné]":
  • dia=wx.MessageDialog(self, "Il n'y a pas de joueur sélectionné", caption = u"Information - Pas de joueur sélectionnée", style = wx.OK|wx.ICON_INFORMATION,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • else:
  • nom='Loto-data\info'+ self.joueur_actuel
  • try :
  • f=open(nom,"r")
  • except:
  • dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque un fichier.", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
  • pos = wx.DefaultPosition)
  • valeur = dia.ShowModal()
  • else:
  • f.close()
  • dlg = Dialog_InfoJoueur(self, -1, "Information joueur",self.joueur_actuel, size=(350, 200),
  • style = wx.DEFAULT_DIALOG_STYLE)
  • dlg.CenterOnScreen()
  • val = dlg.ShowModal()
  • def nouveau(self,evt):
  • frame = Frame(None, "Tirage du Loto - [Pas de joueur sélectionné]")
  • frame.Show(True)
  • class SplashScreen(wx.SplashScreen):
  • def __init__(self):
  • bmp = wx.Image("Loto-data\Image.bmp").ConvertToBitmap()
  • wx.SplashScreen.__init__(self, bmp,
  • wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
  • 2000, None, -1)
  • self.Bind(wx.EVT_CLOSE, self.OnClose)
  • self.fc = wx.FutureCall(1500, self.ShowMain)
  • def OnClose(self, evt):
  • evt.Skip()
  • self.Hide()
  • if self.fc.IsRunning():
  • self.fc.Stop()
  • self.ShowMain()
  • def ShowMain(self):
  • global frame
  • frame = Frame(None, "Tirage du Loto - [Pas de joueur sélectionné]")
  • frame.Show(True)
  • return True
  • class MyApp(wx.App):
  • def OnInit(self):
  • splash = SplashScreen()
  • splash.Show()
  • return True
  • app = MyApp(redirect=True)
  • app.MainLoop()
import wx
import Loto
import os
import time
import locale
import  wx.html as  html
import wx.lib.hyperlink as hl


provider = wx.SimpleHelpProvider()
wx.HelpProvider_Set(provider)


class Aide(wx.Frame):
    def __init__(self, parent, path):
        wx.Frame.__init__(self, parent, -1,"Aide sur le jeu", size=wx.Size(700,610))
        self.SetIcon(wx.Icon("Loto-data\Icone2.ico", wx.BITMAP_TYPE_ICO ))

        self.path = path
        
        self.html = html.HtmlWindow(self, -1, style=wx.NO_FULL_REPAINT_ON_RESIZE)

        self.printer = html.HtmlEasyPrinting()

        self.box = wx.BoxSizer(wx.VERTICAL)

        self.box.Add(self.html, 1, wx.GROW)
        self.SetSizer(self.box)
        self.SetAutoLayout(True)

        self.Home(None)


    def Home(self, event):
        self.html.LoadPage(self.path)

class Dialog_Compare(wx.Dialog):
    def __init__(
            self, parent, ID, title,li1,li11,li2,li22,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):

        pre = wx.PreDialog()
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)

        ti=wx.StaticText(self, -1, "Analise des résultats")

        texte1=""
        i=0
        while i<len(li1): 
            if i==len(li1)-1:
                texte1=texte1 + " et le " + str(li1[i])
            else:
                texte1=texte1 + " le " + str(li1[i]) +','
            i=i+1

        t0=wx.StaticText(self, -1, "Vous avez joué pour le premier tirage" + texte1)

        texte1=""
        i=0
        while i<len(li11): 
            if i==len(li11)-1:
                texte1=texte1 + " et le " + str(li11[i])
            else:
                texte1=texte1 + " le " + str(li11[i]) +','
            i=i+1
                
        t1=wx.StaticText(self, -1, "Les numéro gagnant sont" + texte1)
        
        g1=0
        i=0
        while i<len(li1):
            if li1[i] in li11:
                g1=g1+1
            i=i+1
            
        t2=wx.StaticText(self, -1, "Vous avez " + str(g1) + " numéro(s) en commun")
        
        line1 = wx.StaticLine(self, -1, size=(20,-1), style=wx.LI_HORIZONTAL)
        
        texte1=""
        i=0
        while i<len(li2): 
            if i==len(li2)-1:
                texte1=texte1 + " et le " + str(li2[i])
            else:
                texte1=texte1 + " le " + str(li2[i]) +','
            i=i+1

        t3=wx.StaticText(self, -1, "Vous avez joué pour le deuxième tirage" + texte1)

        texte1=""
        i=0
        while i<len(li22): 
            if i==len(li22)-1:
                texte1=texte1 + " et le " + str(li22[i])
            else:
                texte1=texte1 + " le " + str(li22[i]) +','
            i=i+1
                
        t4=wx.StaticText(self, -1, "Les numéro gagnant sont" + texte1)
        
        g2=0
        i=0
        while i<len(li2):
            if li2[i] in li22:
                g2=g2+1
            i=i+1
            
        t5=wx.StaticText(self, -1, "Vous avez " + str(g2) + " numéro(s) en commun")
        
        nom='Loto-data\info'+joueur
        f=open(nom,'r')
        l1=f.readline()
        l2=f.readline()
        l3=f.readline()
        l4=f.readline()
        f.close()
        l2=int(l2)+1
        l3=int(l3)+g1+g2

        nom='Loto-data\info'+joueur
        f=open(nom,'w')
        locale.setlocale(locale.LC_ALL,'') 
        temp=time.strftime('Le %A %d %B %Y ; %H h %M min et %S s')
        contenu=str(l1)+str(l2)+'\n'+str(l3)+'\n'+temp
        f.write(contenu)
        f.close()
        
        sizer.Add(ti,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t0,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t1,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t2,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(line1,0, wx.GROW|wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t3,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t4,0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t5,0, wx.ALIGN_CENTRE|wx.ALL, 5)

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_OK,u"OK")
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)

        

class Dialog_InfoJoueur(wx.Dialog):
    def __init__(
            self, parent, ID, title,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):

        pre = wx.PreDialog()
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)

        ti="Imformation sur le joueur : " + joueur +'\n'
        titre=wx.StaticText(self, -1, ti)


        fichier="Loto-Data\info"+joueur
        f=open(fichier,"r")
        
        l1=f.readline()
        if l1=="0\n" or l1=="0":
            st=" Normal"
        elif l1=="1\n" or l1=="1":
            st=" Privilégié"
        else:
            st=" Défavorisé"
        
        l2=f.readline()
        nbj=" "+str(l2)
        
        l3=f.readline()
        nbg=" "+str(l3)
        
        j=int(l2)
        g=int(l3)
        nbp=str(j*12-g)
        
        l4=f.readline()
        if l4=="0" or l4=="0\n":
            du=" N'a jamais joué"
        else :
            du= " "+str(l4)
            
        f.close()
        

        t0=wx.StaticText(self, -1, "Statut du joueur :\n")
        t1=wx.StaticText(self, -1, "Nombre de jeux :\n")
        t2=wx.StaticText(self, -1, "Nombre de numéro trouvé :\n")
        t3=wx.StaticText(self, -1, "Nombre de numéro perdu :\n")
        t4=wx.StaticText(self, -1, "Dernière utilisation :")

        t10=wx.StaticText(self, -1, st)
        t11=wx.StaticText(self, -1, nbj)
        t12=wx.StaticText(self, -1, nbg)
        t13=wx.StaticText(self, -1, nbp)
        t14=wx.StaticText(self, -1, du)


        sizer.Add(titre, wx.ALIGN_CENTRE|wx.ALL, 5)

        box0 = wx.BoxSizer(wx.HORIZONTAL) 

        box1 = wx.BoxSizer(wx.VERTICAL)        
        box1.Add(t0, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        box1.Add(t1, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        box1.Add(t2, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        box1.Add(t3, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        box1.Add(t4, 1, wx.ALIGN_RIGHT|wx.ALL, 1)
        
        box2 = wx.BoxSizer(wx.VERTICAL)  
        box2.Add(t10, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box2.Add(t11, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box2.Add(t12, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box2.Add(t13, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box2.Add(t14, 1, wx.ALIGN_LEFT|wx.ALL, 1)

        box0.Add(box1, 1, wx.ALIGN_CENTRE|wx.ALL, 1)
        box0.Add(box2, 1, wx.ALIGN_CENTRE|wx.ALL, 1)

        sizer.Add(box0, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        


        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_OK,u"OK")
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)



class Dialog_Tirage(wx.Dialog):
    def __init__(
            self, parent, ID, title,joueur, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):

        self.joueur=joueur
        self.parent=parent

        self.numero1=[]
        self.numero2=[]

        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)

        liste=[]
        i=1
        while i<50:
            liste.append(str(i))
            i=i+1
        

        
        t1=wx.StaticText(self, -1, "Premier Tirage")
        self.cl1 = wx.CheckListBox(self, -1, (80, 50), wx.DefaultSize, liste)
        self.cl1.SetHelpText("Sélectionner dans cette liste, les 6 numéros que vous voullez jouer")
        self.info1=wx.StaticText(self, -1, "Vous avez choisi 0 numéro(s) sur 6 pour le premier tirage")
        self.info1.SetHelpText("Une fois que vous aurez sélectionné les 12 numéros (6 par tirage - Il y a 2 tirages donc 2 × 6 = 12), le bouton ''Valider'' s'active")

        t2=wx.StaticText(self, -1, "Deuxième Tirage")
        self.cl2 = wx.CheckListBox(self, -1, (80, 50), wx.DefaultSize, liste)
        self.cl2.SetHelpText("Sélectionner dans cette liste, les 6 numéros que vous voullez jouer")
        
        self.b = wx.Button(self, -1, "Valider")
        self.b.Enable(False)
        self.b.SetHelpText("Jouer au Loto : Regardez le tirage")
        self.b.SetDefault()
        self.info2=wx.StaticText(self, -1, "Vous avez choisi 0 numéro(s) sur 6 pour le second tirage")
        self.info2.SetHelpText("Une fois que vous aurez sélectionné les 12 numéros (6 par tirage - Il y a 2 tirages donc 2×6 = 12), le bouton ''Valider'' s'active")


        line1 = wx.StaticLine(self, -1, size=(-1,-1), style=wx.LI_VERTICAL)

        t3=wx.StaticText(self, -1, "Dans cette simulation, l'ordre n'a pas d'improtance")
        t3.SetHelpText("Normalement il faut les trouver dans le même ordre mais bon, ici ont va faire l'impasse")

        box0 = wx.BoxSizer(wx.HORIZONTAL)
        box1 = wx.BoxSizer(wx.VERTICAL)
        box2 = wx.BoxSizer(wx.VERTICAL)
        
        box1.Add(t1, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
        box1.Add(self.cl1, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
        
        box2.Add(t2, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
        box2.Add(self.cl2, 0, wx.ALIGN_CENTRE|wx.ALL, 1)
        
        box0.Add(box1, 1, wx.ALIGN_LEFT|wx.ALL, 1)
        box0.Add(line1, 1, wx.ALIGN_CENTRE|wx.ALL, 1)
        box0.Add(box2, 1, wx.ALIGN_RIGHT|wx.ALL, 1)

        box = wx.StaticBox(self, -1, u"Information")
        bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
        bsizer.Add(self.info1, 0, wx.CENTER, 10)
        bsizer.Add(self.info2, 0, wx.CENTER, 10)

        sizer.Add(box0, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(t3, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(bsizer, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(self.b, 0, wx.ALIGN_CENTRE, 5)
        
        
        self.Bind(wx.EVT_CHECKLISTBOX, self.choix1, self.cl1)
        self.Bind(wx.EVT_CHECKLISTBOX, self.choix2, self.cl2)
        self.Bind(wx.EVT_BUTTON, self.valide, self.b)


        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
        btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
        

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 4)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)
        
    def choix1(self, event):
        index = event.GetSelection()
        label = self.cl1.GetString(index)
        if self.cl1.IsChecked(index):
            self.numero1.append(int(label))
        else:
            self.numero1.remove(int(label))
        if len(self.numero1)==6 and len(self.numero2)==6:
            self.b.Enable(True)
        else:
            self.b.Enable(False)
        texte="Vous avez choisi " + str(len(self.numero1)) + " numéro(s) sur 6 pour le premier tirage"
        self.info1.SetLabel(texte)

    def choix2(self, event):
        index = event.GetSelection()
        label = self.cl2.GetString(index)
        if self.cl2.IsChecked(index):
            self.numero2.append(int(label))
        else:
            self.numero2.remove(int(label))
        if len(self.numero1)==6 and len(self.numero2)==6:
            self.b.Enable(True)
        else:
            self.b.Enable(False)
        texte="Vous avez choisi " + str(len(self.numero2)) + " numéro(s) sur 6 pour le second tirage"
        self.info2.SetLabel(texte)

    def valide(self, evt):
        self.Destroy()
        nom='Loto-data\info'+self.joueur
        f=open(nom,'r')
        lignen1=f.readline()
        f.close()
        lignen1=int(lignen1)
        Frame.tirage(self.parent,lignen1,self.numero1,self.numero2,None)



class Dialog_About(wx.Dialog):
    def __init__(
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):
        pre = wx.PreDialog()
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)

        bmp = wx.Bitmap("Loto-data\Aeragroup.bmp", wx.BITMAP_TYPE_BMP)
        image=wx.StaticBitmap(self, -1, bmp, (80, 50), (bmp.GetWidth(), bmp.GetHeight()))
        


        textaprop=u"""
À propos de ce programme :
_____________________________

Créé par Aéra Group pour code-SourceS.
Version 1.0 ; Licence : Libre. Vous pouvez modifier ce que vous souhaité."""

        label = wx.StaticText(self, -1, textaprop)
        hyper = hl.HyperLinkCtrl(self, wx.ID_ANY, "Source déposé sur Python-France",
                                        URL="http://www.pythonfrance.com/")
        sizer.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(hyper, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        sizer.Add(image, 0, wx.ALIGN_CENTRE|wx.ALL, 5)

        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_OK,u"OK")
        btn.SetDefault()

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)



class Dialog_Joueur(wx.Dialog):
    def __init__(
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):
        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)
        
        text = wx.StaticText(self, -1, "Le choix d'un joueur permet d'enregister les parramètres et les résultats d'un joueur")
        text.SetSize(text.GetBestSize())
        text.SetHelpText("Le joueur doit être déja enregistrer")

        f=open("Loto-data\Utilisateur.txt","r")
        l1=f.readline()
        l1=eval(l1)
        f.close()
        self.joueur=l1[0]
        
        self.ch = wx.Choice(self, -1, (400, 50), choices = l1)
        self.ch.SetSelection(0)
        self.ch.SetHelpText("Permet de sélectionner un joueur déja enregistrer")
        b = wx.Button(self, -1, "Sélectionner ce joueur")
        b.SetHelpText("Valide votre choix")
        b.SetDefault()

        sizer.Add(text, 0, wx.ALIGN_CENTRE|wx.ALL|wx.TOP, 5)
        sizer.Add(self.ch, 10, wx.ALIGN_CENTRE|wx.ALL|wx.GROW, 10)
        sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.Bind(wx.EVT_CHOICE, self.choix, self.ch)
        self.Bind(wx.EVT_BUTTON, self.valide, b)



        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
        btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
        

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)
        
    def choix(self, event):
        self.joueur=event.GetString()

    def valide(self, evt):
        Frame.nom_joueur(frame,self.joueur.encode("windows-1252"))
        self.Destroy()
        dia=wx.MessageDialog(self, "Joueur actuel : " + self.joueur.encode("windows-1252"), caption = u"Confirmation", style = wx.OK|wx.ICON_INFORMATION,
                             pos = wx.DefaultPosition)
        valeur = dia.ShowModal()



class Dialog_Nouveau(wx.Dialog):
    def __init__(
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):
        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)
        
        box = wx.BoxSizer(wx.HORIZONTAL)

        label = wx.StaticText(self, -1, "Enter le nom du nouveau joueur")
        label.SetHelpText("Un nouveau joueur permet d'enregistrer son score")
        box.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.text = wx.TextCtrl(self, -1, "", size=(180,-1))
        self.text.SetHelpText("Taper ici son nom. N'utilisez pas un nom déja utilisé même en jouant avec les majuscules")
        box.Add(self.text, 1, wx.ALIGN_CENTRE|wx.ALL, 5)

        b = wx.Button(self, -1, "Ajouter ce joueur")
        b.SetHelpText("Ce bouton permet de créé un nouveau joueur")
        b.SetDefault()

        sizer.Add(box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
        sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.Bind(wx.EVT_BUTTON, self.valide, b)



        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_CANCEL,u"Fermer cette fenêtre")
        btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)

    def valide(self,evt):
        if self.text.GetValue()=="":
            dia=wx.MessageDialog(self, "Vous n'avez rien inscrit dans le champs d'enter", caption = u"Pas de nom", style = wx.OK|wx.ICON_ERROR,
                             pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
        else:
            try:
                f=open("Loto-data\Utilisateur.txt","r")
            except:
                dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt.", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
                                 pos = wx.DefaultPosition)
                valeur = dia.ShowModal()
                self.Destroy()
            else:
                l1=f.readline()
                l1=eval(l1)
                f.close()
                i=0
                l2=[]
                while i<len(l1):
                    l2.append(l1[i].lower())
                    i=i+1
                if self.text.GetValue().lower() in l2:
                    dia=wx.MessageDialog(self, "Ce nom existe déja. Chosiser en un autre", caption = u"Nom déja enregister", style = wx.OK|wx.wx.ICON_EXCLAMATION,
                                 pos = wx.DefaultPosition)
                    valeur = dia.ShowModal()
                elif ' \ '.strip() in self.text.GetValue() or ' / '.strip() in self.text.GetValue() or ':' in self.text.GetValue() or '*' in self.text.GetValue() or '?' in self.text.GetValue() or '"' in self.text.GetValue() or '<' in self.text.GetValue() or '>' in self.text.GetValue() or '|' in self.text.GetValue():
                    dia=wx.MessageDialog(self, 'Ce nom comporte un carractère interdit.\nVoici la liste des carractères interdit : / \ : * ? " < > |', caption = u"Carractère interdit", style = wx.OK|wx.wx.ICON_EXCLAMATION,
                                 pos = wx.DefaultPosition)
                    valeur = dia.ShowModal()
                else:
                    l1.append(self.text.GetValue())
                    l1=str(l1)
                    f=open("Loto-data\Utilisateur.txt","w")
                    f.write(l1.encode("windows-1252"))
                    f.close()

                    nom="Loto-data\info"+self.text.GetValue()
                    f=open(nom,"w")
                    f.write('0\n0\n0\n0')
                    f.close()
                    dia=wx.MessageDialog(self, "Le joueur " + self.text.GetValue().encode("windows-1252") + " à bien éait ajouter", caption = u"Confirmation", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
                    valeur = dia.ShowModal()
                    self.text.Clear()
        

class Dialog_Suprime(wx.Dialog):
    def __init__(
            self, parent, ID, title, size=wx.DefaultSize, pos=wx.DefaultPosition, 
            style=wx.DEFAULT_DIALOG_STYLE
            ):
        pre = wx.PreDialog()
        pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP)
        pre.Create(parent, ID, title, pos, size, style)

        self.PostCreate(pre)

        sizer = wx.BoxSizer(wx.VERTICAL)
        
        text = wx.StaticText(self, -1, "ATTENTION : LA SUPPRESSION EST DÉFINITIVE ET LA RÉCUPÉRATION DES FICHIER SUPPRIMÉ EST IMPOSSIBLE")
        text.SetSize(text.GetBestSize())
        text.SetHelpText("La suppression entraine la destruction des fichiers de sauvegardes")

        f=open("Loto-data\Utilisateur.txt","r")
        l1=f.readline()
        l1=eval(l1)
        f.close()
        self.joueur=l1[0]
        
        self.ch = wx.Choice(self, -1, (400, 50), choices = l1)
        self.ch.SetSelection(0)
        self.ch.SetHelpText("Permet de sélectionner le joueur à supprimer")
        b = wx.Button(self, -1, "Supprimer ce joueur")
        b.SetHelpText("Permet de valider votre choix")

        sizer.Add(text, 0, wx.ALIGN_CENTRE|wx.ALL|wx.TOP, 5)
        sizer.Add(self.ch, 10, wx.ALIGN_CENTRE|wx.ALL|wx.GROW, 10)
        sizer.Add(b, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.Bind(wx.EVT_CHOICE, self.choix, self.ch)
        self.Bind(wx.EVT_BUTTON, self.valide, b)



        btnsizer = wx.StdDialogButtonSizer()
        
        if wx.Platform != "__WXMSW__":
            btn = wx.ContextHelpButton(self)
            self.box.Add(btn, 0, wx.ALL|wx.CENTER, 5)
            
        btn = wx.Button(self, wx.ID_CANCEL,u"Annuler")
        btn.SetHelpText("Permet de revenir à la fenêtre principale en quittant cette boite de dialogue")
        btn.SetDefault()

        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        sizer.Add(btnsizer, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)
        sizer.Fit(self)
        
    def choix(self, event):
        self.joueur = event.GetString()

    def valide(self,evt):
        dia=wx.MessageDialog(self, 'Êtes vous sûr de vouloir supprimer le joueur ' + self.joueur.encode("windows-1252") + ' ?', caption = u"Confirmation", style = wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION,
                                 pos = wx.DefaultPosition)
        valeur = dia.ShowModal()
        if valeur == wx.ID_YES:
            f=open("Loto-data\Utilisateur.txt","r")
            l1=f.readline()
            l1=eval(l1)
            f.close()
            
            l1.remove(self.joueur)
            
            f=open("Loto-data\Utilisateur.txt","w")
            l1=str(l1).encode("windows-1252")
            f.write(l1)
            f.close()
            
            nom="Loto-data\info"+self.joueur
            try:
                os.remove(nom)
            except:
                pass
            dia=wx.MessageDialog(self, "Le joueur " + self.joueur.encode("windows-1252") + ' a bien été supprimer', caption = u"Confirmation de suppression", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
            
            j=Frame.renvoie_joueur(frame)
            if self.joueur.encode("windows-1252")==j:
                Frame.nom_joueur(frame,'[Pas de joueur sélectionné]')
            self.Destroy()
        else:
            dia=wx.MessageDialog(self, "La procédure de suppression a été annulé", caption = u"Opération annuler", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()


class Frame(wx.Frame):
    """Affiche une fenêtre"""
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size=(800, 700))
        self.SetIcon(wx.Icon("Loto-data\Icone.ico", wx.BITMAP_TYPE_ICO ))
        self.Bind(wx.EVT_CLOSE, self.quitter)

        menuBar = wx.MenuBar()

        menu = wx.Menu()
        menu.Append(11, "Nouveau\tCtrl+N", "Ouvrir une nouvelle fenêtre")
        menu.Append(12, "Effectuer un tirage", "Joué au Loto")
        menu.AppendSeparator()
        menu.Append(13, "Quitter\tAlt-F4", "Quitter le programme")

        joueur = wx.Menu()
        joueur.Append(21, "Choisir un/Changer de joueur", "Chosir un joueur pour l'enregistrement des paramètres")
        joueur.Append(22, "Ajouter un nouveau joueur", "Ajouter un joueur à la base de donnée")
        joueur.Append(23, "Supprimer un joueur", "Supprimer un joueur à la base de donnée ainsi que ses sauvegardes")
        joueur.AppendSeparator()
        joueur.Append(24, "Voir les statistiques de ce joueur", "Voir ne nombre de jeux, de victoires et de défaites")

        aide = wx.Menu()
        aide.Append(31, "Aide\tF1", "Permet d'optenir de l'aide sur le jeu")
        aide.Append(32, "À propos de ...\tF2","Information sur le programme")


        self.Bind(wx.EVT_MENU, self.nouveau, id=11)
        self.Bind(wx.EVT_MENU, self.pre_tirage, id=12)
        self.Bind(wx.EVT_MENU, self.quitter, id=13)
        self.Bind(wx.EVT_MENU, self.definir_joueur, id=21)
        self.Bind(wx.EVT_MENU, self.nouveau_joueur, id=22)
        self.Bind(wx.EVT_MENU, self.supprimer_joueur, id=23)
        self.Bind(wx.EVT_MENU, self.info_joueur, id=24)
        self.Bind(wx.EVT_MENU, self.aide, id=31)
        self.Bind(wx.EVT_MENU, self.about, id=32)
        

        menuBar.Append(menu, "Fichier")
        menuBar.Append(joueur, "Action Joueur")
        menuBar.Append(aide, "Aide")
        self.SetMenuBar(menuBar)

        self.CreateStatusBar()


        self.joueur_actuel='[Pas de joueur sélectionné]'
        self.nb_tirage=0
        

        panel = wx.Panel(self)

        text = wx.StaticText(panel, -1, "Tirage du Loto")
        text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
        text.SetSize(text.GetBestSize())
        btn = wx.Button(panel, -1, "Quitter")
        funbtn = wx.Button(panel, -1, "Effectuer un tirage")
        self.t = wx.TextCtrl(panel, -1,"",size=(700, 400), style=wx.TE_MULTILINE|wx.TE_READONLY)

        self.Bind(wx.EVT_BUTTON, self.quitter, btn)
        self.Bind(wx.EVT_BUTTON, self.pre_tirage, funbtn)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(text, 0, wx.ALL|wx.CENTER, 10)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 10)
        sizer.Add(funbtn, 0, wx.ALL|wx.CENTER, 10)
        sizer.Add(self.t, 0, wx.ALL|wx.CENTER, 10)
        panel.SetSizer(sizer)
        panel.Layout()
        self.Center()

        funbtn.SetDefault()




    def quitter(self, evt):
        dlg = wx.MessageDialog(self, 'Êtes vous sûr de voulloir quitter "Le trirage du Loto"' ,'Quitter ce programme', wx.YES_NO|wx.ICON_QUESTION)
        reponse = dlg.ShowModal()
        if reponse==wx.ID_YES:
            self.Destroy()

    def pre_tirage(self,evt):
        if self.joueur_actuel== "[Pas de joueur sélectionné]":
            a=self.definir_joueur(None)
            if a!=wx.ID_CANCEL:                
                dlg = Dialog_Tirage(self, -1, "Sélection des numéros",self.joueur_actuel, size=(350, 200),
                                        style = wx.DEFAULT_DIALOG_STYLE)
                dlg.CenterOnScreen()
                val = dlg.ShowModal()
        else:
            dlg = Dialog_Tirage(self, -1, "Sélection des numéros",self.joueur_actuel, size=(350, 200),
                                    style = wx.DEFAULT_DIALOG_STYLE)
            dlg.CenterOnScreen()
            val = dlg.ShowModal()

    def tirage(self,triche,boules_tire1,boules_tire2,evt=None):
            self.nb_tirage=self.nb_tirage+1
            texte="Boujours est bienvenu au tirage du loto !!!\n\n\nEt voici le premier tirage\n"

            if triche==2:
                    Loto.tirage(boules_tire1)
                    boules_tire11=[]
                    i=0
                    while i<len(boules_tire1):
                        boules_tire11.append(boules_tire1[i])
                        i=i+1
                    del boules_tire1[6:len(boules_tire1)]
                    del boules_tire11[0:6]
            elif triche==1:
                    Loto.tirage(boules_tire1)
                    boules_tire11=boules_tire1
                    del boules_tire11[6:len(boules_tire1)]
            else:
                boules_tire11=[]
                Loto.tirage(boules_tire11)
            
            i=0
            texte1=""            
            while i<len(boules_tire11): 
                if i==len(boules_tire11)-1:
                    texte1=texte1 + " et le numéro complémentaire, le " + str(boules_tire11[i])
                else:
                    texte1=texte1 + " le " + str(boules_tire11[i]) +','
                i=i+1
            texte=texte+"Les numéro gagnant pour ce premier tirage sont le :" + texte1 + "\n\n"

            texte=texte+"Continuons avec le deuxième tirage\n"


            if triche==2:
                    Loto.tirage(boules_tire2)
                    boules_tire22=[]
                    i=0
                    while i<len(boules_tire2):
                        boules_tire22.append(boules_tire2[i])
                        i=i+1
                    del boules_tire2[6:len(boules_tire2)]
                    del boules_tire22[0:6]
            elif triche==1:
                    Loto.tirage(boules_tire2)
                    boules_tire22=boules_tire2
                    del boules_tire22[6:len(boules_tire2)]
            else:
                boules_tire22=[]
                Loto.tirage(boules_tire22)
                    
            i=0
            texte2=""
            while i<len(boules_tire22): 
                if i==len(boules_tire22)-1:
                    texte2=texte2 + " et le numéro complémentaire, le " + str(boules_tire22[i])
                else:
                    texte2=texte2+ " le " + str(boules_tire22[i]) +','
                i=i+1
            texte=texte+"Les numéro gagnant pour ce deuxième tirage sont le :" + texte2 + "\n\n"
            texte=texte+"_______________________________________________________________________________________________________________\n\n"

                       
            self.t.SetInsertionPoint(len(self.t.GetValue())+8*self.nb_tirage)
            self.t.WriteText(texte)



            dlg = Dialog_Compare(self, -1, "Résultat et analyse",boules_tire1,boules_tire11,boules_tire2,boules_tire22,self.joueur_actuel, size=(350, 200),
                                    style = wx.DEFAULT_DIALOG_STYLE)
            dlg.CenterOnScreen()
            val = dlg.ShowModal()
            
        
    def definir_joueur(self, evt):
        try:
            f=open("Loto-data\Utilisateur.txt","r")
            f.close()
        except:
            dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
            return wx.ID_CANCEL
        else:
            f=open("Loto-data\Utilisateur.txt","r")
            l1=f.readline()
            f.close()
            if l1=='[]':
                dia=wx.MessageDialog(self, """Il n'y a aucun joueur enregistré.\nPour enregistrer un joueur allez dans le menu "Action Joueur" et "Ajouter un nouveau joueur" """, caption = u"Pas de joueur", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
                valeur = dia.ShowModal()
                return wx.ID_CANCEL
            else:
                dlg = Dialog_Joueur(self, -1, "Sélectionner un joueur", size=(350, 200),
                                 style = wx.DEFAULT_DIALOG_STYLE)
                dlg.CenterOnScreen()
                val = dlg.ShowModal()
                return val

    def nouveau_joueur(self, evt):
        dlg = Dialog_Nouveau(self, -1, "Ajouter un nouveau joueur", size=(350, 200),
                         style = wx.DEFAULT_DIALOG_STYLE)
        dlg.CenterOnScreen()
        val = dlg.ShowModal()

    def supprimer_joueur(self, evt):
        try:
            f=open("Loto-data\Utilisateur.txt","r")
            f.close()
        except:
            dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque le fichier Utilisateur.txt", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
        else:
            f=open("Loto-data\Utilisateur.txt","r")
            l1=f.readline()
            f.close()
            if l1=='[]':
                dia=wx.MessageDialog(self, """Il n'y a aucun joueur enregistré.\nPour enregistrer un joueur allez dans le menu "Action Joueur" et "Ajouter un nouveau joueur" """, caption = u"Pas de joueur", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
                valeur = dia.ShowModal()
            else:
                dlg = Dialog_Suprime(self, -1, "Supprimer un joueur", size=(350, 200),
                                 style = wx.DEFAULT_DIALOG_STYLE)
                dlg.CenterOnScreen()
                val = dlg.ShowModal()
                
    def aide (self, evt):
        aide = Aide(self,"Aide.htm")
        aide.Show(True)

    def about (self, evt):
        dlg = Dialog_About(self, -1, "À propos de ...", size=(350, 200),
                                 style = wx.DEFAULT_DIALOG_STYLE)
        dlg.CenterOnScreen()
        val = dlg.ShowModal()

    def nom_joueur(self,joueur):
        if joueur == "[Pas de joueur sélectionné]":
            self.SetTitle("Tirage du Loto - [Pas de joueur sélectionné]")
            self.joueur_actuel="[Pas de joueur sélectionné]"
        else :            
            self.SetTitle("Tirage du Loto - [Joueur : " + joueur + "]")
            self.joueur_actuel=joueur

    def renvoie_joueur(self):
        return self.joueur_actuel

    def info_joueur(self,evt):
        if self.joueur_actuel== "[Pas de joueur sélectionné]":
            dia=wx.MessageDialog(self, "Il n'y a pas de joueur sélectionné", caption = u"Information - Pas de joueur sélectionnée", style = wx.OK|wx.ICON_INFORMATION,
                                 pos = wx.DefaultPosition)
            valeur = dia.ShowModal()
        else:
            nom='Loto-data\info'+ self.joueur_actuel
            try :
                f=open(nom,"r")
            except:
                dia=wx.MessageDialog(self, "Une grave erreur s'est produite : il manque un fichier.", caption = u"Erreur", style = wx.OK|wx.ICON_ERROR,
                                 pos = wx.DefaultPosition)
                valeur = dia.ShowModal()
            else:
                f.close()
                dlg = Dialog_InfoJoueur(self, -1, "Information joueur",self.joueur_actuel, size=(350, 200),
                                 style = wx.DEFAULT_DIALOG_STYLE)
                dlg.CenterOnScreen()
                val = dlg.ShowModal()
            
    def nouveau(self,evt):
        frame = Frame(None, "Tirage du Loto - [Pas de joueur sélectionné]")
        frame.Show(True) 

class SplashScreen(wx.SplashScreen):
    def __init__(self):
        bmp = wx.Image("Loto-data\Image.bmp").ConvertToBitmap()
        wx.SplashScreen.__init__(self, bmp,
                                 wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
                                 2000, None, -1)
        self.Bind(wx.EVT_CLOSE, self.OnClose)
        self.fc = wx.FutureCall(1500, self.ShowMain)


    def OnClose(self, evt):
        evt.Skip()
        self.Hide()
        if self.fc.IsRunning():
            self.fc.Stop()
            self.ShowMain()

    def ShowMain(self):
        global frame
        frame = Frame(None, "Tirage du Loto - [Pas de joueur sélectionné]")
        frame.Show(True)
        return True

class MyApp(wx.App):
    def OnInit(self):
        splash = SplashScreen()
        splash.Show()
        return True
        
app = MyApp(redirect=True)
app.MainLoop()

 Conclusion

Pour faire fonctionner le code, télécharger le zip et surtout, ne séparé pas "Loto-GUI.pyw" des autres fichiers ou dossier faute de quoi il ne fonctionnera pas ! Normalement le jeu est assez simple, mais j'ai tout de même mis une aide détailé au cas ou !

POUR CEUX QUI DÉSIR TÉLÉCHARGER WX.PYTHON :

Allez sur le site http://www.wxpython.org/download.php et sélectionner la version correspondant à votre version de Python et à votre système d'exploitation.



POUR CEUX QUI DÉSIR TÉLÉCHARGER WINZIP OU WINRAR :

Vous pouvez le télécharger entre autre à cette adresse http://www.clubic.com/telecharger-fiche9488-winzip .html

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

08 mai 2007 11:52:24 :
Oublit de mettre la source
09 mai 2007 12:26:49 :
Résolution d'un bug d'afficharge des résultats (cf commentaires)

 Sources du même auteur

Source avec Zip Source avec une capture GESTIONNAIRE DE FICHIERS MUSICAUX
Source avec Zip TUTORIEL - INTRODUCTION À WXPYTHON
Source avec Zip Source avec une capture CARNET D'ADRESSE
Source avec Zip Source avec une capture TABLEAU AVEC WXPYTHON (WXGRID) - VERSION 1.5
Source avec Zip TUTORIEL - COMPILATION AVEC PY2EXE

 Sources de la même categorie

Source avec Zip QUESTIONNAIRE par darkanghel91
Source avec Zip Source avec une capture JEU DU PLUS OU MOINS par Iphonemax
TAQUIN 4*4 par fredericfabry
Source avec Zip Source avec une capture ASTRE2.0 CASSE-BRIQUES par Mints
Source avec Zip JEU DU NOMBRE MYSTERE EN PYTHON par messorama

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GEOMETRE EXPERT par grephit
Source avec Zip Source avec une capture GÉNÉRATEUR DE MOT DE PASSE PYTHON / WXPYTHON par svmars
Source avec Zip Source avec une capture PYSNAKE WITH PYGAME par beltegeuse
Source avec Zip TUTORIEL - INTRODUCTION À WXPYTHON par aera group
Source avec Zip Source avec une capture CARNET D'ADRESSE par aera group

Commentaires et avis

Commentaire de Shakan972 le 08/05/2007 16:25:34

Salut Aera group je voulais te dire que j'ai testé ta source mais il justement il y a un problème en fait quand je crée un nouveau profil et que je procède à un tirage il me renvoie cela :

Traceback (most recent call last):
  File "C:\Documents and Settings\Waziff\Bureau\pythonfrance_SIMULATION-LOTO_42621\Loto\Loto-GUI.pyw", line 389, in valide
    f=open(nom,'r')
IOError: [Errno 2] No such file or directory: 'Loto-data\\info[Pas de joueur s\xe9lectionn\xe9]'

Est-ce normal ?

Sinon à part ça je trouve que tu as bien organisé ta source que l'aide que tu as mis est très appréciable !!

Une fois ce petit problème réglé je te donnerai une note.

Merçi de tenir compte de mon problème. :)

Commentaire de aera group le 08/05/2007 19:39:02

C'est très bizard, je n'ai pas ça chez moi !!! D'après le message d'erreur, le programme essaye de lire un fichier qui existe pas ! En effet, lors du tirage, il faut obligatoirement sélectionner un joueur (je suppose que tu t'en es aperçu). Si aucun joueur n'est sélectionné, le programme lui asimile le nom de "[Pas de joueur sélectionné]", mais ceci change lorsque le joueur est sélectionné ! Or là, ce n'est pas le cas, le programme cherche normalement un fichier nomé "info" + nom_du_joueur, et la il cherche le fichier "info[Pas de joueur sélectionné]" qui évidament n'existe pas !!! Vraiment bizard !!! Dis moi précisément sur quel bouton tu à appuyé pour que je puisse essayé de reproduire l'erreur chez moi !!!

Commentaire de aera group le 08/05/2007 19:50:54

En esayant de reproduire l'erreur, j'ai prouvé un autre bug dans l'affichage des résultat dans le fenêtre principale, mais je le résolverai demain donc pas de problème pour ça. Mais je n'est toujours pas réussit à reproduire l'erreur que tu a trouvé Shakan972, donc j'attend ton message ! Il se peut que tu ai réussit à trouvé un bug très particulier parce que chez moi tout va parfaitement bien. Si quelqu'un à tester la source, je lui demanderai de nous dir s'il à eut le même problème ou pas merci beaucoup !!!!
_____
Aéra

Commentaire de Shakan972 le 08/05/2007 20:57:47

Bon alors je ne comprends rien j'ai refait la manipulation comme je l'avais décris précedemment et bizarrement cela fonctionne très bien :?
Je ne comprends pas quoi que j'ai placé la source dans un autre dossier, c'est la là seule chose que j'ai faîtes et pourtant je n'ai pas déplacé les fichiers de ta source situés dans le même dossier.

Bref, bref oublions ce que j'ai dit et je tiens à te mettre 9/10 car il y a plus intéressant que le loto comme support de programmation ;)

Commentaire de Shakan972 le 08/05/2007 21:03:06

Sinon je voulais également te dire que j'avais remarqué à quel point tu étais à l'aise avec la biliothèque WxPython d'où le service que tu rendrais à cette partie du site en rédigeant un tuto sur ce sujet.

Enfin ne te sens pas obligé c'était juste une idée comme ça qui me passait par la tête. ;)

Commentaire de aera group le 09/05/2007 12:02:48

Boujour,

1. Merci pour ta note et ton commentaire (je suis tout à fait d'accord, une simulation de loto c'est complétement bidon :) !!!). C'est vraiment bizard, en effet, il se peut avec certaint répertoir comportant des accents (vivement que l'unicode soit complétement intégré à Python parce que là, ça pose pas mal de problème, Python ne pourra pas se issé dans les plus puissants languages de programmation sans résoudre ce problème), mais j'ai justement fait tous mes test dans des répertoires avec accents, pour vérifié que l'unicode intégré à WxPython fonctionné bien !!! D'après le message d'erreur, tu été dans le répertoire sur le bureau nommé "pythonfrance_SIMULATION-LOTO_42621". Ne seraise pas plutôt le ZIP ? Si c'est le cas c'est peut être l'explication, sinon, je ne comprend rien (je m'attache particulièrement à ce problème car je déteste les sources non fini ou plein de bugs, alors en plus si c'est l'une des mienne ...). Il y a parfois des bug inexpliquer (ça peut également venir de Windows, mais c'est plus rare. Disons que le problème et clos)

2. Tu as certainement remarqué que WxPython, été une bibliothèque très interressante permetant de créé de jolie interface graphique digne de ce nom ! Mais elle est aussi très difficile à utiliser (c'est le rever de la médaile). Tkinter permet de créé des interface graphique très simplement et sans difficulté. WxPython demande une maitrise des classes alors que Tk ne l'exige pas. On est généralement décu par le style des bouton de Tk ainsi que des différents Widget. De plus il est imposible sans Pmw de créé des élément dit évolué (comme par exemple des listes que vous pourrez admiré dans ma prochaine source : Répertoire téléphonique - prévu pour bientôt si j'ai le temps et surtout le courage :) !!!). WxPython propose déja des démos, mais c'est honteux : pour expliquer au gents, il utilise des méthodes de création de fenêtre extrèmement compliqué (en réalité, c'est pour pouvoir ensuite les inséré dans une grande application qui regroupe toutes les démos - c'est totalement ridicule mais bon). J'ai également eut cette idée de faire un tutoriel sur WxPython, mais la tache est titanesque. Mais, comme tu en a fait la demande, je suppose que c'est  parce que tu as sans doute envie d'utilisé WxPython et tu ne doit pas être le seul (je sais également que xeolin tiens à maitrisé cette bibliothèque), je crois que je vais prendre un peu de temps pour réalisé ce tuto.

Après ce long roman (je devrais demandé à allé en première L plutôt que demandé mon passage en terminal S mdr :) - non,après une grande réflexion - 0.2 s - je suis trop nul en français et en espagnol pour ça, je déteste les langues et surtout je fais trop de fautes d'orthographe :) - Vive les maths, la physique et surtout la programmation), je vous laisse à vos occupation. Si ce bug (ou un autre) se reproduit n'ésité pas à mettre un commentaire, toutes les critiques (justifié) son les bienvenus ainsi que vos idées, remarques ou impression.
Bonne continuation
_____
Aéra

Commentaire de Shakan972 le 09/05/2007 15:49:17

Quand je lis ton message Aera group je peux voir à quel point tu es motivé et à quel ton intérêt pour la programmation est grand.
Cela me touche et je suis content qu'il y ai quelqu'un comme toi sur cette partie du site car vois-tu python n'a pas une réputation en béton et est plutôt délaissé d'après ce que je vois bref c'est la raison pour laquelle tu as la possiblité de remplir le site de tutos concernant wxPython car vois-tu si tu ne le fais pas je ne pense pas que quelqu'un le feras c'est la vérité et je ne pense pas avoir tort en disant ça.

Non mais regarde un peu la réalité c'est surtout le langage C et Visual Basic qui dominent, python on en a que faire.
C'est donc la raison pour laquelle je constate à quel point ta présence est précieuse sur cette partie du site, j'espère donc que tu apporteras de bonnes choses après tout pythonneux que nous sommes nous devons bien ça à notre langage Python. :)

Donc j'espère ne pas te paraître un peu cinglé et j'espère que tu comprendras le fond de ma pensée.

Sinon reste motivé comme tu le fais si bien ;)

Commentaire de aera group le 09/05/2007 18:44:54

Tous d'abors, je voudrais te remercier pour ton message très agréable.

Et oui, Python n'est pas un language très répendu actuelement. Enfin, ce n'est pas tout à fait vrai, Python est présent dans de nombreux programme mais généralement sous forme de sous programme comme pour Windows ou Google. Mais je suis assez surpris de savoir que certain programme utilise Python intégralement (enfin, je suppose mais d'après mes infos, c'est le cas - corrigez moi en cas d'erreur de ma par) comme Bender, les jeux Civilization IV et Battlefield 2142. Python est un language assez récents (1990) par rapport au C++ (1980) et C (1970) ce qui explique en partit sont que aujourd'hui peu de jeu utilise Python. Mais notre bon language de programmation à de beau jour devant lui !!! En effet, Python commence à s'imposé de plus en plus dans le monde de la programmation, même s'il ne détronerra (à mon avis) jamais C++ bien instalé en haut des languages de programmation. Tu nous parle de Visual Basic. C'est sans aucun doute le logiciel le plus utilisé en programmation aujourd'hui car il permet de créé une interface graphique en générant un code BASIC. Mais le basic est un language en perte de vitesse car ses concurrent le prennent de vitesse comme le Pascal, le C++, le Java et le .... Python ! Et oui, nous avons un language d'avenir, tout Java qui est également en train de se dévellopé à grande vitesse (et pas selement sur le Web). Pour conclure sur ce point, je dirais que Python ne pourra se dévellopé sans une intégration complette de l'unicode, mais aussi par le création d'une bibliothèque graphique très performante (comparrez ce que vous pouvez faire avec WxPython et l'interface de la nouvelle gamme office 2007).


"je suis content qu'il y ai quelqu'un comme toi" ==> Je suis très touché que tu me tienne si grande estime, mais je ne suis pas le seul. En tous cas, ça fait toujours plaisir quand quelqu'un dit du bien de soi, on à l'impression de servire à quelque chose

"si tu ne le fais pas je ne pense pas que quelqu'un le feras" ==> Triste vérité, peu être également que tout le monde ne tiens pas à faire évolué le site. Dommage, quand j'ai débuté avec WxPython, j'ai bien galléré et je n'ai pas trouvé d'aide sur ce site.

"j'espère donc que tu apporteras de bonnes choses" ==> Moi aussi ! Que les autres en face également à leur niveau bien sûr

"j'espère ne pas te paraître un peu cinglé" ==> Pas pour moi en tous cas

"tu comprendras le fond de ma pensée" ==> Bien sûr que je l'ai comprise. Encore merci

J'espère ne pas avoir fait trop de faute d'orthographes. Bonne programmation à tous.
_____
Aéra

Commentaire de TMONOD le 30/06/2007 12:58:01

Hello,
- Bravo pour la maitrise de wxPython, j'ai moi-même toujours été rebutté par cette bibliothèque. - Malheureusement c'est la plus aboutie.Il faut faire avec.

- Par contre, pas bravo pour l'organisation de ton code, c'est un gros mélange de gestion de l'interface et de la logique même du programme.
- Beaucoup de redondance de code,  Python est super fort pour gérer les listes alors il ne faut pas se priver pour arrêter de répeter les box1,box2  et autres l1,l2,l3 etc... le code et la maintenance n'en serons que plus clairs
- Ton code contenant beaucoup de messages texte, tu aurais tout interêt à les organiser dans un module voire même une classe avec des dictionnaires  par thèmes , erreurs, titres). Ainsi tu les utiliserais directement dans ton code :
exemple :
label = wx.StaticText(self, -1, "Enter le nom du nouveau joueur")
deviendrait :
label = wx.StaticText(self, -1, LotoMessages.infos["NouveauJoueur"])

comme ca le jour ou tu veux utiliser plusieurs langues dans ton programme ca se fera finger in the nose.

- Pareil pour tous les chemins  comme "Loto-data\Utilisateur.txt" qui pourraient ainsi être facilement modifiées quand ton code évolue

Sinon bonne continuation !

Commentaire de aera group le 30/06/2007 19:00:27

Bonjour TMONOD et merci pour ton commentaire très enrichissant !
En effet le code n'est pas très lisible, mais c'est en grande partie du à la longueur des instructions pour créé l'interface graphique (même si on pourrait en effet simplifier ces instructions par une classe regroupant tous les messages d'erreurs etc... comme tu le propose dans ton commentaire). Par contre, la "gestion de l'interface et de la logique même du programme" sont assez bien séparé je trouve : tous ce qui conserne le tirage du Loto se trouve dans le module "Loto.py" et l'interface et la gestion du joueur se trouve dans "Loto-GUI.py".
En effet, on peut facilement simplifier le code avec les "box1,box2", mais j'ai fais délibérément cette "erreur" car mon but ici de montrer l'interface avec WxPython (le loto n'a aucun interré, on est bien d'accord, c'est le "jeu" le plus nul que l'on puisse imaginer reproduir sur PC !!! Honte à moi ;) ) et donc, une simplification du code le rendrait encore plus difficile à comprendre pour les novices en WxPython (allez voir mon Tutoriel pour un peu d'aide).
Enfin, lorsque l'on créé un programme, la coutume est de toujours respecter les mêmes régles de sauvegarde pour des questions évidente de contabilité. Cela impose évidament de prévoir toute les éventualités de sauvegarde (exemple, rajouté une option ...). C'est ce que j'ai fait donc théoriquement, le répertoire de sauvegarde devrait toujours être quelque soit la version "Loto-data\Utilisateur.txt" même s'il est préférable de le noter dans une variable une fois pour toute pour pouvoir la modifier au cas où.
Voila, j'espère que j'aurais assez bien répondu à ton messageet que tu en aura compris l'essentiel. Bonne continuation à toi.
_____
Aéra

Commentaire de Mario1095 le 29/02/2008 12:10:16

Pas mal le programme.
En tout cas, il est meilleur que ton orthographe.
Tu es déja parti à l'école ?

Commentaire de Mario1095 le 29/02/2008 12:10:48

Au sinon cool le programme

Commentaire de aera group le 29/02/2008 16:09:31

On fait ce que l'on peut !!! Vive l'aurtaugrafe

Commentaire de Lutcho74 le 04/02/2009 16:47:58

Je n'ai pu utiliser ta source car je n'ait pas le bon python mais j'aurais bien aimé essayer...juste comme sa pour ton loto tu as bien dut utiliser des nombre aléatoire je ne sais pas comment sa marche avec WxPython moi j'utilise Python 2.6.1 et je ne m'y connais que très peu en prog j'ai commencer en novembre...:)
A quel âge as tu commencer la programmation AERA GROUP ?

Commentaire de Lutcho74 le 04/02/2009 16:48:54

j'ai oublier un morceau a mon commentaire --' donc comment as tu fait pour générer se nombre aléatoire si c'est comme sa que sa marche...

Commentaire de aera group le 07/02/2009 16:41:41

Bonjour Lutcho74, pour les nombres aléatoires, je te renvoie page 140 du livre de Gérard Swinnen que tu as gratuitement à cette adresse :http://www.cifen.ulg.ac.be/inforef/swi/download/python_notes.pdf
Il peut également te servir pour commencer avec Python !

Personnellement j'ai commencer Python en 2nd (15/16 ans je ne sais plus), mais j'ai commencer à programmer vers 12 ans. L'age n'est pas important, je me rend compte que plus le temps passe, plus je sais faire de chose, mais c'est grâces à de meilleurs connaissance des systèmes électroniques, pas de programmations.
Je ne comprend pas pourquoi tu ne peux pas utiliser mon code ? La partie sur les nombres aléatoires est ici : http://files.codes-sources.com/fichier.aspx?id=42621&f=Loto+(par+A%e9ra+Group)+%5bMise+%e0+jour+-+1%5d%5cLoto.py)
_________________
Aéra, what else ?

Commentaire de Lutcho74 le 07/02/2009 16:54:42

Salut,
J'ai commencer a lire le livre de Gérard Swinnen il y a un petit moment le problème j'ai trop de devoir a ratrapper a cause d'un mauvais prof de math et j'ai la galère des autre devoirs à côtés...
A mon avis je ne peu pas le lire car je n'ait pas la bonne version de python ( moi j'ai 3.0.quelque chose) et il me manque un module :
Traceback (most recent call last):
  File "C:\Documents and Settings\Compaq_Propriétaire\Bureau\Loto-GUI.pyw", line 1, in <module>
    import wx
ImportError: No module named wx

Je te demander a quel âge tu avais commencer la prog car moi j'ai 14 ans et je commence la prog depuis novembre et python depuis décembre et je me demande a peu près combien de temps il faut pour atteindre un nivo tel que le tient...
Je ne comprend comment tu  peu connaitre plus de chose en programmation en apprenant sur les systèmes électronique (?????)

Commentaire de aera group le 07/02/2009 22:10:21

Ce n'est pas un problème de version de Python, mais un problème de module : WxPython. C'est une bibliothèque graphique, qui n'est pas de base dans python. Regarde le cadre "conclusion" pour voir comment l'installer.

Connaitre des systèmes électroniques, c'est commencer à la base ! Actuelement, tu utilse Python sans comprendre ce qui se passe réelement, tu n'as aucune idée de la façon dont Python foncionne principalement parce que tu ne sais pas comment fonctionne un micro processer. En sachant comment cela marche, tu comprends mieux, et donc tu as une vision plus global des choses.
La programmation, c'est l'art d'apprendre à une machine a faire ce que l'on attend d'elle. Ca ne s'apprend pas dans les livres. Je te pose une colle (definition : execice difficile) : comment ferais tu pour créer un logiciel pernettant de créé un emploie du temps des classes d'un Lycée ?
Personnellement j'y ai déjà réfléchis, ca demende une analyse poussé, mais aucune connaissance technique pour établir les grandes lignes ...

Trouver ces solutions n'est pas donné à tous le monde certaines personnes ont un espris plus orienté dans ce sens d'autres préfère étudier Molière ... Comme dirait mon prof, certaine personnes ont "une sorte de 2ème vue parralèle" où le problème se résout de lui même !

Ensuite, pour faire des programme plus poussé, une connaissance d'un pc ou d'un micro est necessaire : je pense à la programmation machine (robotique) ou pour serveur Web.

Inutile de vouloir allez trop vite, cette source demende une connaissance des classes ...

Commentaire de Lutcho74 le 08/02/2009 09:18:53

Salut,
Je vais être franc je ne les pas lutta source car dès que j'ai vue les module que tu importer et qu'il y avait du graphique j'ai même pas chercher a aller plus loin...
Et je tais demander comment tu faisait pour générer un nombre aléatoire car le loto c'est un peu ça ^^ ...car j'ai programmer un petit truc qui pose une question complètement aléatoire qui se trouve dans une liste et ensuite e reprend se nombre aléatoire pour prendre la réponse dans une autre liste(évidement le nombre de la question et de la réponse dans les deux liste correspondent) et puis j'ai ajouté une condition pour la comparaison...pour le nombre aléatoire je me suis servi de random comme module mais a mon avis toi c'est le module Loto (en tout cas sa me paraît logique(tu la écrit indirectement)).

@+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

wxPython et DDE [ par DoudouBidou ] Bonjour,j'utilise la liaison DDE pour dialoguer entre python et une application sous windows 2000j'ai trouvé (un peu par hasard) un module DDE pour gé [wxPython] apperçu avant impression multipages [ par dj_djocker ] au secour!!!!!!une semaine que je cherche partout mais rien a faire.a travers un logiciel cr&#233;e en python je cr&#233;e une impression d'au moins u wxPython [ par MHI ] Bonjour Je recherche une doc en fran&#231;ais expliquant simplement comment cr&#233;&#233; une fen&#234;tre, des boutons et une listebox avec wxPython wxpython : afficher et effacer des images [ par steede ] Bonjour,J'ai besoin dans mon application d'affiicher des images et de les remplacer par d'autres en fonction des clics de la souris.Je sais les affich Un Canvas comme dans Tkinter, mais pour wxPython [ par samurize ] Slt tout le monde. &nbsp; Voila tout est dans le titre (ou a peu pres&nbsp; ) : &nbsp; Je suis &#224; la recherche d'un module pouvant s'integrer da wxPython et Unicode [ par tomazi75 ] Bonjour, &nbsp;J'aimerais afficher le caract&#232;re u'\u2661' (symbole 'pique' comme pour les cartes &#224; jouer). Pas d'erreur, mais &#231;a affich Qu'est ce que le python permet de réaliser!! [ par Mansuz ] Mansuz Salut! J'aurais aimé savoir ce qui peut être réalisé en Python. Par exemple Flash  c'est les petites anims, des jeux funs. Le C pour fair des a wxpython infobulle [ par zann12 ] Bonjour à tous,   Je suis débutant en Python, et actuellement, j'ai cherché comment faire une info bulle avec wxPython, et je n'ai rien trouvé.   Enfa Variable globale dans une application wxpython [ par tasnim86 ] Bonsoir,j'utilise la bibliothèque wxpython comment pourais je déclarer une variable globale à toute une application wx.app? je veux avoir une variable WXPYTHON et Base de données [ par dayiri ] Salut,je débute en python. j'arrive à concevoir des interfaces graphiques, je voudrois mettre une base de données en arrière plan de l'interface et po


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales