# coding: utf8 import wx from wx.lib.intctrl import IntCtrl import time from time import gmtime, strftime import os from os import getcwd 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) #On capture l'event de fermeture de l'app self.Bind(wx.EVT_CLOSE,self.on_close,self) #Deco ImgDir = (getcwd()+u"\\Fond_setup.jpg") fond = wx.Image(ImgDir, wx.BITMAP_TYPE_ANY).ConvertToBitmap() fond1 = wx.StaticBitmap(self.panel, -1, fond) #Crée la barre d'état (en bas). self.CreerBarreEtat() #Score self.txtScoreBox = IntCtrl(fond1,-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(fond1,-1,size=(100,20),style=wx.TE_PROCESS_ENTER) self.txtNomBox.SetHint(u"NOM") self.Bind(wx.EVT_TEXT_ENTER,self.SendScore,self.txtNomBox) #Boutons self.BtnInit = wx.Button(fond1,-1,u"Réinitialiser ?") self.Bind(wx.EVT_BUTTON, self.InitScore, self.BtnInit) #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)) #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 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 os.remove(u"score.txt") with open(u"score.txt",u"a") as texte: while i<10: texte.write("joueur 0\n") i+=1 evt.Skip() def SendScore(self,evt): score_entry=self.txtScoreBox.GetValue() nom_entry=self.txtNomBox.GetValue() dico = {} une_occurence=0 if score_entry and nom_entry !='': dico[nom_entry]=score_entry for cle,valeur in dico.items(): scorenom=cle+u" "+str(valeur) #print scorenom 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): nouveau_texte.write(scorenom+u'\n') une_occurence=1 else: nouveau_texte.write(data) else: nouveau_texte.write(data) os.remove(u'score.txt') os.rename(u'nouveau_score.txt', u'score.txt') evt.Skip() def on_close(self,evt):#On detruit tout :) self.Destroy() class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, -1, None) frame.Show(True) frame.Centre() return True if __name__=='__main__': app = MyApp(0) app.MainLoop()