Advertisement
Guest User

mongraphe.py

a guest
May 24th, 2015
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.70 KB | None | 0 0
  1. #!/usr/bin/python
  2. # mongraphe.py
  3. import wx
  4. from datetime import date,datetime,time
  5. import time
  6. import math
  7.  
  8.  
  9. class Ligne(wx.Frame):
  10.     def __init__(self, parent, id, TitreFenetre, DonneesEntrantes, TitreGraphe):
  11.         wx.Frame.__init__(self, parent, id, TitreFenetre, size=(1024, 768))
  12.         self.Bind(wx.EVT_PAINT, self.OnPaint)
  13.         self.LargeurBoite = 790
  14.         self.HauteurBoite = 690
  15.         self.TitreGraphe = TitreGraphe
  16.         self.donnees = []
  17.         self.ReglerDonnees(DonneesEntrantes)
  18.         self.Centre()
  19.         self.Show(True)
  20.  
  21.     def DessineBoite(self,dc):
  22.         # Horizontal
  23.         dc.DrawLine(10,10,800,10)
  24.         dc.DrawLine(10,700,800,700)
  25.         # Vertical
  26.         dc.DrawLine(10,10,10,700)
  27.         dc.DrawLine(800,10,800,700)
  28.  
  29.     def DessineAxe(self,dc):
  30.         # Horizontal
  31.         dc.DrawLine(60,580,700,580)
  32.         # Vertical
  33.         dc.DrawLine(60,580,60,80)
  34.  
  35.     def DessineValeurs(self,dc):
  36.         c2 = 0
  37.         for cntr in range(580,30,-50):
  38.             dc.SetPen(wx.Pen(wx.NamedColour('black'),1))
  39.             dc.DrawLine(60,cntr,50,cntr)
  40.             dc.SetFont(wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.BOLD))
  41.             dc.SetPen(wx.Pen(wx.NamedColour('black'),20))
  42.             dc.DrawText(str(c2),26,cntr-7)
  43.             c2 = c2 + (50 * self.ValeurEchelle)
  44.  
  45.     def DessineBarres(self,dc):
  46.         dc.SetPen(wx.Pen(wx.NamedColour('black'),5))
  47.         for cntr in range(0,len(self.ListeValeurs)):
  48.             dc.DrawRectangle(84 + (cntr* 20),580,2,self.ListeValeurs[cntr]/-self.ValeurEchelle)
  49.  
  50.     def DessineTexteRot(self,dc,txt,x,y):
  51.         dc.SetFont(wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.BOLD))
  52.         dc.SetPen(wx.Pen(wx.NamedColour('black'),20))
  53.         dc.DrawRotatedText(txt,x,y,-45)
  54.  
  55.     def DessineTitre(self,dc,txt):
  56.         dc.SetFont(wx.Font(20,wx.DEFAULT,wx.NORMAL,wx.BOLD))
  57.         dc.SetPen(wx.Pen(wx.NamedColour('black'),20))
  58.         # Recupere la longueur du texte a dessiner
  59.         vals = dc.GetFullTextExtent(txt)
  60.         # Retourne (Largeur,hauteur,Decalage,espacementInitial)
  61.         # Recupere la position gauche (x) pour centrer le texte
  62.         txtleft = (self.LargeurBoite-vals[0])/2
  63.         dc.DrawText(txt,txtleft,30)
  64.         # Raz taille et couleur du stylo
  65.         dc.SetPen(wx.Pen(wx.NamedColour('black'),2))
  66.  
  67.     def DessineBarresDates(self,dc,dcount):
  68.         for cntr in range(1,dcount+1):
  69.             dc.DrawLine(65+(cntr*20),580,65+(cntr*20),600)
  70.  
  71.     #==================================
  72.     #  Convertit dd/mm/yy en timestamp unix
  73.     #==================================
  74.     def DateToStamp(self,x):
  75.         x = x+" 00:00:00"
  76.         return(time.mktime(time.strptime(x, "%d/%m/%Y %H:%M:%S")))
  77.     #==================================
  78.     #  Convertit un horodatage unix en dd/mm/yy
  79.     #==================================
  80.     def Timestamp2Date(self,tstmp):
  81.         return datetime.fromtimestamp(int(tstmp)).strftime('%d/%m/%Y')
  82.     #==================================
  83.     #  Dessine les dates en biais
  84.     #==================================
  85.     def DessineDates(self,dc,startdate,enddate):
  86.         sd = int(self.DateToStamp(startdate))
  87.         ed = int(self.DateToStamp(enddate))
  88.         ed = ed + 86400
  89.         stp = 1
  90.         for cntr in range(sd,ed,86400):
  91.             dt = self.Timestamp2Date(cntr)
  92.             self.DessineTexteRot(dc,dt,65+(stp*20),600)
  93.             stp = stp + 1
  94.     #==================================
  95.     # Arrondi au 500 le plus proche
  96.     #==================================
  97.     def arrondi(self,x):
  98.         return int(math.ceil(x/500.0))*500
  99.  
  100.     def ReglerDonnees(self,DonneesAUtiliser):
  101.         if type(DonneesAUtiliser[1]) is tuple:
  102.             self.ListeDates=[]
  103.             self.ListeValeurs=[]
  104.             for l in DonneesAUtiliser:
  105.                 self.ListeDates.append(l[0])
  106.                 self.ListeValeurs.append(l[1])
  107.             self.ValeurMax = self.arrondi(max(self.ListeValeurs))
  108.             self.ValeurEchelle = self.ValeurMax/500
  109.         else:
  110.             self.ListeValeurs=[]
  111.             self.ListeDates=[]
  112.             for l in DonneesAUtiliser:
  113.                 self.ListeValeurs.append(l)
  114.             self.ValeurMax = self.arrondi(max(self.ListeValeurs))
  115.             self.ValeurEchelle = self.ValeurMax/500
  116.  
  117.     #==================================
  118.     #  Routine principale
  119.     #==================================
  120.     def OnPaint(self,event):
  121.         dc = wx.PaintDC(self)
  122.         self.DessineBoite(dc)
  123.         self.DessineAxe(dc)
  124.         self.DessineTitre(dc,self.TitreGraphe)
  125.         # Barres de dates et dates
  126.         self.DessineBarresDates(dc,31)
  127.         leng = len(self.ListeDates)
  128.         if leng > 0:
  129.             sd = self.ListeDates[0]
  130.             ed = self.ListeDates[4]
  131.             self.DessineDates(dc,sd,ed)
  132.         else:
  133.             self.DessineDates(dc,"02/01/2015","03/01/2015")
  134.         # Barres de valeurs - Dessine 10 barres
  135.         self.DessineValeurs(dc)
  136.         # Enfin on dessine les barres de donnees
  137.         self.DessineBarres(dc)
  138.  
  139. if __name__ == "__main__":
  140.     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)
  141.     #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))
  142.  
  143.     app = wx.App()
  144.     Ligne(None, -1, 'Bar Chart',donnees,"Ventes mensuelles - Colorado Springs")
  145.     app.MainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement