interface-etalonnage
Interface d'étalonnage
Bibliothèques utilisées
On utilisera :
Serial: Pour la communication avec l'Arduino
tkinter: Pour avoir une UI basique
Objectifs
Pour le capteur de couleur, afficher la couleur à partir des données reçues et pouvoir choisir les coefficients d'étalonnage
Pour le capteur de mouvement, afficher les coordonnées du gyroscopique, accéléromètre et de boussole.
Introduction à Tkinter
Liens
Import du package
import tkinter as tkPremière fenêtre
Notre premier modèle de fenêtre.
class PremiereFenetre(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.creerTexte()
def creerTexte(self):
self.texte = tk.Label(self, text='Bonjour')
self.texte.grid()En premier lieu, on remarque que notre classe hérite de la classe tk.Frame.
Ensuite, on délégue la construction de la partie tk.Frame au constructeur de la classe.
On doit appeler la méthode grid pour rendre la fenêtre affichable.
On appelle ensuite creerTexte qui se charge de créer le texte Bonjour.
Dans la fonction creerTexte, on appelle le constructeur de la classe tk.Label. Le premier argument est la frame parent. Le reste permet de configurer davantage le widget.
Dans l'entrée du programme, on met:
pf = PremiereFenetre()
pf.mainloop()Classes utiles
Frame: la brique de base qui contiendra nos widget
Label: Pour afficher du texte
Canvas: Pour afficher des formes
Un petit chronometre
class Chronometre(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.grid()
self.compteur = 0
self.creerChrono()
self.dessine()
def dessine(self):
self.chrono['text'] = str(self.compteur)
self.compteur += 1
self.chrono.after(1, self.dessine)
def creerChrono(self):
self.chrono = tk.Label(self, text=str(self.compteur))
self.chrono.grid()Un clignotant
class Clignotant(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master, height=256, width=256)
self.grid()
self.compteur = 0
self.dessine()
def dessine(self):
self['bg'] = "#" + ("%02x" % ((self.compteur << 3) % 256))*3
self.compteur += 1
self.after(1, self.dessine)Un tournant
class Tournant(tk.Canvas):
def __init__(self, master=None):
tk.Canvas.__init__(self, master, height=256, width=256)
self.compteur = 0
self.polygon = np.array([[-8, -8], [8, 8]])
self.create_rectangle(*self.polygon.flat, outline="red",
fill="yellow",
width=3,
tag="polygon")
self.grid()
self.dessine()
def unit_vector(self, r, w, t):
return r*np.array([np.cos(w*t),
np.sin(w*t)])
def dessine(self):
self.compteur += 1
self.coords("polygon",
*(self.polygon +
(128, 128) +
self.unit_vector(75, 1/32, self.compteur)
).flat)
self.after(1, self.dessine)