Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # mongraphe.py
- import wx
- from datetime import date,datetime,time
- import time
- import math
- class Ligne(wx.Frame):
- def __init__(self, parent, id, TitreFenetre, DonneesEntrantes, TitreGraphe):
- wx.Frame.__init__(self, parent, id, TitreFenetre, size=(1024, 768))
- self.Bind(wx.EVT_PAINT, self.OnPaint)
- self.LargeurBoite = 790
- self.HauteurBoite = 690
- self.TitreGraphe = TitreGraphe
- self.donnees = []
- self.ReglerDonnees(DonneesEntrantes)
- self.Centre()
- self.Show(True)
- def DessineBoite(self,dc):
- # Horizontal
- dc.DrawLine(10,10,800,10)
- dc.DrawLine(10,700,800,700)
- # Vertical
- dc.DrawLine(10,10,10,700)
- dc.DrawLine(800,10,800,700)
- def DessineAxe(self,dc):
- # Horizontal
- dc.DrawLine(60,580,700,580)
- # Vertical
- dc.DrawLine(60,580,60,80)
- def DessineValeurs(self,dc):
- c2 = 0
- for cntr in range(580,30,-50):
- dc.SetPen(wx.Pen(wx.NamedColour('black'),1))
- dc.DrawLine(60,cntr,50,cntr)
- dc.SetFont(wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.BOLD))
- dc.SetPen(wx.Pen(wx.NamedColour('black'),20))
- dc.DrawText(str(c2),26,cntr-7)
- c2 = c2 + (50 * self.ValeurEchelle)
- def DessineBarres(self,dc):
- dc.SetPen(wx.Pen(wx.NamedColour('black'),5))
- for cntr in range(0,len(self.ListeValeurs)):
- dc.DrawRectangle(84 + (cntr* 20),580,2,self.ListeValeurs[cntr]/-self.ValeurEchelle)
- def DessineTexteRot(self,dc,txt,x,y):
- dc.SetFont(wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.BOLD))
- dc.SetPen(wx.Pen(wx.NamedColour('black'),20))
- dc.DrawRotatedText(txt,x,y,-45)
- def DessineTitre(self,dc,txt):
- dc.SetFont(wx.Font(20,wx.DEFAULT,wx.NORMAL,wx.BOLD))
- dc.SetPen(wx.Pen(wx.NamedColour('black'),20))
- # Recupere la longueur du texte a dessiner
- vals = dc.GetFullTextExtent(txt)
- # Retourne (Largeur,hauteur,Decalage,espacementInitial)
- # Recupere la position gauche (x) pour centrer le texte
- txtleft = (self.LargeurBoite-vals[0])/2
- dc.DrawText(txt,txtleft,30)
- # Raz taille et couleur du stylo
- dc.SetPen(wx.Pen(wx.NamedColour('black'),2))
- def DessineBarresDates(self,dc,dcount):
- for cntr in range(1,dcount+1):
- dc.DrawLine(65+(cntr*20),580,65+(cntr*20),600)
- #==================================
- # Convertit dd/mm/yy en timestamp unix
- #==================================
- def DateToStamp(self,x):
- x = x+" 00:00:00"
- return(time.mktime(time.strptime(x, "%d/%m/%Y %H:%M:%S")))
- #==================================
- # Convertit un horodatage unix en dd/mm/yy
- #==================================
- def Timestamp2Date(self,tstmp):
- return datetime.fromtimestamp(int(tstmp)).strftime('%d/%m/%Y')
- #==================================
- # Dessine les dates en biais
- #==================================
- def DessineDates(self,dc,startdate,enddate):
- sd = int(self.DateToStamp(startdate))
- ed = int(self.DateToStamp(enddate))
- ed = ed + 86400
- stp = 1
- for cntr in range(sd,ed,86400):
- dt = self.Timestamp2Date(cntr)
- self.DessineTexteRot(dc,dt,65+(stp*20),600)
- stp = stp + 1
- #==================================
- # Arrondi au 500 le plus proche
- #==================================
- def arrondi(self,x):
- return int(math.ceil(x/500.0))*500
- def ReglerDonnees(self,DonneesAUtiliser):
- if type(DonneesAUtiliser[1]) is tuple:
- self.ListeDates=[]
- self.ListeValeurs=[]
- for l in DonneesAUtiliser:
- self.ListeDates.append(l[0])
- self.ListeValeurs.append(l[1])
- self.ValeurMax = self.arrondi(max(self.ListeValeurs))
- self.ValeurEchelle = self.ValeurMax/500
- else:
- self.ListeValeurs=[]
- self.ListeDates=[]
- for l in DonneesAUtiliser:
- self.ListeValeurs.append(l)
- self.ValeurMax = self.arrondi(max(self.ListeValeurs))
- self.ValeurEchelle = self.ValeurMax/500
- #==================================
- # Routine principale
- #==================================
- def OnPaint(self,event):
- dc = wx.PaintDC(self)
- self.DessineBoite(dc)
- self.DessineAxe(dc)
- self.DessineTitre(dc,self.TitreGraphe)
- # Barres de dates et dates
- self.DessineBarresDates(dc,31)
- leng = len(self.ListeDates)
- if leng > 0:
- sd = self.ListeDates[0]
- ed = self.ListeDates[4]
- self.DessineDates(dc,sd,ed)
- else:
- self.DessineDates(dc,"02/01/2015","03/01/2015")
- # Barres de valeurs - Dessine 10 barres
- self.DessineValeurs(dc)
- # Enfin on dessine les barres de donnees
- self.DessineBarres(dc)
- if __name__ == "__main__":
- donnees = (300,20,47,96,1200,700,500,230,179,500,300,20,47,96,200,400,500,230,179,500,300,20,47,96,200,400,500,230,179,500,475,423)
- #donnees = (("01/02/2015",169.63),("02/02/2015",188.81),("03/02/2015",61.85),("04/02/2015",94.53),("05/02/2015",235.85))
- app = wx.App()
- Ligne(None, -1, 'Bar Chart',donnees,"Ventes mensuelles - Colorado Springs")
- app.MainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement