1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| # -*- coding: cp1252 -*-
from Tkinter import *
import numpy as np
class Graph(Frame):
"""Barographes"""
def __init__(self, maitre=None, hauteur=100, largeur = 200, fond = 'white', dimension=20):
Frame.__init__(self) # constructeur de la classe parente
# Définition des attributs d'instance :
self.hauteur = hauteur
self.largeur = largeur
self.fond = fond
self.dimension = dimension
self.tab_old = np.zeros(shape =(self.dimension),dtype=np.float)
# Définition du widget graph :
self.gr = Canvas (self,height = self.hauteur, width = self.largeur, bg = fond)
self.gr.pack()
# fonction de tracé
def setTrace(self, tab, scale):
x=range(self.dimension)
y=range(self.dimension)
y_old=range(self.dimension)
x[0] = 0.
y_max = np.max (tab)
y_min = np.min (tab)
y_old_max = np.max (self.tab_old)
y_old_min = np.min (self.tab_old)
y_mean = int ((y_max + y_min)/2. + .5)
y_old_mean = int ((y_old_max + y_old_min)/2. + .5)
y[0] = scale * (y_mean - tab [0] ) + self.hauteur/2
y_old[0] = scale * (y_old_mean - self.tab_old [0] ) + self.hauteur/2
pas = float (self.largeur / self.dimension)
i = 1
while (i < self.dimension):
x[i] = float (pas * i)
y[i] = scale * (y_mean - tab [i] ) + self.hauteur/2
y_old[i] = scale * (y_old_mean - self.tab_old [i]) + self.hauteur/2
self.gr.create_line(x[i-1],y_old[i-1],x[i],y_old[i],fill=self.fond)
self.gr.create_line(x[i-1],y[i-1],x[i],y[i])
i = i+1
self.gr.create_line(x[self.dimension-1],y_old[self.dimension-1],self.largeur,y_old[0],fill=self.fond)
self.gr.create_line(x[self.dimension-1],y[self.dimension-1],self.largeur,y[0])
self.tab_old = np.copy(tab)
#### Code pour tester la classe : ###
if __name__ == '__main__':
n = 20
temp = np.ndarray(shape =(20),dtype=np.float)
temp.fill (120.)
root = Tk()
gra = Graph(root,200,400,'cyan')
gra.pack(side =TOP)
gra.setTrace (temp, 10.)
i = 0
while (i<n):
temp [i] = 120. + .5*(i-5.)
if (i > 12): temp[i] = temp[i] +2.
i=i+1
gra.setTrace (temp, 10.)
root.mainloop() |
Partager