Bonjour à tous
J’ai une question concernant l’optimisation du code pour une petite application que j’ai développé en python.
Cette application permet de piloter une carte relais connectée sur le port GPIO d’un Raspberry Pi. La physionomie de l’interface est évolutif en fonction du nombre de relais que comporte la carte connectée (4-8-12 ou 16). Il y a un bouton par relais et donc uniquement le nombre de boutons visibles en fonction de la carte utilisée.
Chaque bouton peut avoir un libellé personnalisé via une fenêtre de paramètrage, dans laquelle on spécifie également la broche du port GPIO correspondant.
Tous les paramètres sont sauvegardés dans un fichier pour être exploités à chaque utilisation de l’application.
Tout fonctionne sans problème. Néanmoins, je trouve mon code assez basique et je souhaiterais l’améliorer, dans la mesure du possible.
Dans l’interface, qui est construit via Tkinter, je positionne chaque bouton dans la fenêtre et je lui affecte une fonction qui va traiter le clic bouton.
Vu que j’ai 16 boutons au maximum, j’appelle une définition par bouton :
La définition appelée correspondante est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Bout_Rel01 = Button(fenetre, text=Lib1[3:], width=Larg_Bouton, bg = Coul06, fg = Coul05, font=police, command = CommutRelais1)
J’ai donc 16 définitions, de CommutRelais1 à CommutRelais16 qui contiennent chacune les variables GPIO_Rel01 à GPIO_Rel016, Bout_Rel01 à Bout_Rel016.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def CommutRelais1(): # Commutation du relais 1 - L'activation du relais s'effectue lorsque la broche GPIO est à l'état bas EtatRelais = GPIO.input(GPIO_Rel01) # On teste l'état de la broche du GPIO alimentant le relais if EtatRelais == 1: # Si la broche est à l'état haut (le relais n'est pas activé) GPIO.output(GPIO_Rel01, 0) # On désactive la broche pour activer le relais Bout_Rel01.configure(bg = Coul02, fg = Coul06) # On passe le fond de bouton en vert et le texte en gris foncé else: # Si la broche est à l'état bas (désactivé) GPIO.output(GPIO_Rel01, 1) # On active la broche pour désactiver le relais Bout_Rel01.configure(bg = Coul06, fg = Coul05) # on passe le fond de bouton en gris foncé et le texte en gris clair
Comme dit plus haut, ça fonctionne, mais 16 définitions comme ça, je trouve que ce n'est pas terrible et je pense qu’il doit être possible d’optimiser ce code.
Ma question est la suivante : y’a t’il une possibilité d’appeler une définition unique (ex : CommutRelais) pour l’ensemble des 16 boutons, et dans cette définition, de détecter quel est le bouton déclencheur de l’événement, puis de lancer les actions inhérentes à chaque bouton/relais ?
Merci par avance pour vos propositions
Jean-Pierre
Partager