# coding: utf8 import wx from wx.lib.intctrl import IntCtrl import time from time import gmtime, strftime import os from os import getcwd import wx.media from os.path import * class MyFrame(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, None, id, u"Ranking Emul V0.1a par Fawn Le Sombre", wx.DefaultPosition, wx.Size(300, 200),style=wx.MINIMIZE_BOX|wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX|wx.STAY_ON_TOP) #Panel pour affichage self.panel = wx.Panel(self, -1, size=wx.Size(300, 200)) #On capture l'event de fermeture de l'app self.Bind(wx.EVT_CLOSE,self.on_close,self) #Crée la barre d'état (en bas). self.CreerBarreEtat() self.affichage = Affichage(None, -1, None) #Score self.txtScoreBox = IntCtrl(self.panel,-1,size=(100,20),style=wx.TE_PROCESS_ENTER) self.txtScoreBox.SetHint(u"SCORE") self.Bind(wx.EVT_TEXT_ENTER,self.SendScore,self.txtScoreBox) #Nom self.txtNomBox = wx.TextCtrl(self.panel,-1,size=(100,20),style=wx.TE_PROCESS_ENTER) self.txtNomBox.SetHint(u"NOM") self.Bind(wx.EVT_TEXT_ENTER,self.SendScore,self.txtNomBox) #Bouton Init self.BtnInit = wx.Button(self.panel,-1,u"Réinitialiser ?") self.Bind(wx.EVT_BUTTON, self.InitScore, self.BtnInit) #Boutons Affichage self.BtnAffichage = wx.Button(self.panel,-1,u"Afficher Scores") self.Bind(wx.EVT_BUTTON, self.Affichage, self.BtnAffichage) #Sizer install gbox0 = wx.GridBagSizer(10,10) gbox0.SetEmptyCellSize((10,10)) gbox0.Add(self.txtScoreBox,(1,0)) gbox0.Add(self.txtNomBox,(0,0)) gbox0.Add(self.BtnInit,(2,0)) gbox0.Add(self.BtnAffichage,(2,1)) #PIP box0 = wx.StaticBox(self.panel, -1, u"Rankemulator :") bsizer0 = wx.StaticBoxSizer(box0, wx.HORIZONTAL) sizerH0 = wx.BoxSizer(wx.VERTICAL) sizerH0.Add(gbox0, 0, wx.ALL|wx.CENTER, 10) bsizer0.Add(sizerH0, 1, wx.EXPAND, 0) #--------Ajustement du sizer---------- mainSizer = wx.BoxSizer(wx.VERTICAL) mainSizer.Add(bsizer0, 0,wx.ALL|wx.EXPAND, 10) self.SetSizer(mainSizer) def Affichage(self,evt): self.affichage.Show(True) def Chrono(self):#Chronometre (date ) stemps = time.strftime(u"%A %d/%m/%Y") #Definit le format voulu self.SetStatusText(stemps,1) #Affiche a droite. def CreerBarreEtat(self):#Creation de la barre d'etat du bas avec l'affichage de la date self.CreateStatusBar(2) #Cree une barre de statut (en bas) de deux parties. self.SetStatusWidths([-1,150]) #Definit la taille. self.Chrono()#Affiche. def InitScore(self,evt): i=0 if exists(u"score.txt"): os.remove(u"score.txt") with open(u"score.txt",u"a") as texte: while i<5: #Definit le nombre de joueurs a classer ici 5 texte.write("joueur 0\n") i+=1 else: with open(u"score.txt",u"w") as texte: while i<5: #Definit le nombre de joueurs a classer ici 5 texte.write("joueur 0\n") i+=1 texte.close() evt.Skip() def SendScore(self,evt): score_entry=self.txtScoreBox.GetValue() nom_entry=self.txtNomBox.GetValue() compteur=0 memo=[] dico = {} #On crée un dico pour stocker les entrées une_occurence=0 #Toujours la var pour catch juste la premiere occurence if score_entry and nom_entry !='': #On vérifie que l'on a bien reçu un score et un nom (à toi d'adapter d'ou tu les reçois) dico[nom_entry]=score_entry #On associe le score à la clé "nom" for cle,valeur in dico.items(): #On fait une boucle pour recuperer sous forme cle+u" "+str(valeur) (soit ex: pierre 123) scorenom=cle+u" "+str(valeur) #A partir de là on reprend le truc classique pour ecrire la premiere ocurence et remplacer la ligne dans "score.txt" with open(u"score.txt",u"r") as texte,open(u'nouveau_score.txt', u'w') as nouveau_texte: lignes = texte.readlines() for data in lignes: if une_occurence==0: score_propre=data.split(u' ')[-1].rstrip(u'\n') if int(valeur)>int(score_propre): del lignes[-1]#On efface la derniere ligne du fichier i=0 nouveau_texte.write(scorenom+u'\n') while i