Amélioration d'un code destiné à naviguer entre plusieurs images à l'aide de boutons poussoirs

Bonjour,
J’ai besoin de naviguer d’une photo à l’autre, en utilisant deux boutons poussoirs, un « gauche » et un « droite ». Au démarrage le programme lance une image d’accueil, et ensuite en fonction de mon appui sur gauche ou droite, apparait l’image à gauche de celle de l’image d’accueil, et à droite de mon image d’accueil.
Voilà l’état de mon programme.
Je suis vraiment à un très bas niveau en python, mais j’ai réussi à atteindre l’objectif.
Ca marche! mais à des moments le programme se bloque sans que j’en identifie la raison. De plus, je pense qu’une simplification, et des améliorations doivent être faites, d’autant que souhaite utiliser plus de trois images!!!
Voilà le code :

#!/usr/bin/env python3

coding: utf-8

from time import sleep
import RPi.GPIO as GPIO
import os
GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(17, GPIO.FALLING)
GPIO.add_event_detect(27, GPIO.FALLING)

a = 20
b = 20

while True:
if a == 20 and b == 20 :
histoire = « hanseletgretel.jpg »
os.system(« fbi -T 50 /home/pi/Desktop/ » + histoire)
sleep(1)
b = b + 1

if GPIO.event_detected(27):
a = a + 1

if GPIO.event_detected(17):
a = a - 1

if a == 19 and b == 21 :
histoire = « leloupetleschevreaux.jpg »
os.system(« fbi -T 50 /home/pi/Desktop/ » + histoire)
sleep(1)
b = b - 1

if a == 21 and b == 21:
histoire = « lestroispetitscochons.jpg »
os.system(« fbi -T 50 /home/pi/Desktop/ » + histoire)
sleep(1)
b = b - 1

if a == 18 :
a = 19
if a == 22 :
a = 21

En gros chaque interruption de mon « gauche » ou de mon « droite » augmente ou baisse de 1 la valeur de a; le valeurs de b elles varient après que l’image soit affichée. en effet si je ne fais pas varier b après l’affichage, mes images clignotent puisque les conditions se re remplissent à l’infini dans ma boucle.

Voilà, j’espère etre suffisamment clair, je vous remercie de l’aide que vous pourriez m’apporter pour simplifier tout ça, j’imagine avec des fonctions que je connais ou ne maitrise pas.

Merci encore

hello,

un programme (que les puriste me pardonne lol ) qui doit faire en gros le job ( les input sont bien sur a remplacer par ta gestion de bouton )

#!/usr/bin/env python3
# coding: utf-8
from time import sleep
#import RPi.GPIO as GPIO
import os
import cv2  # pip install opencv-python

import glob 
import os.path 

def listdirectory(path): 
    fichier=[] 
    l = glob.glob(path+'/*') 
    for i in l: 
        if os.path.isdir(i): fichier.extend(listdirectory(i)) 
        else: fichier.append(i)
    return fichier

a=[]
a=listdirectory('/home/pi/Images')
for i in range(len(a)):
   print(a[i])
   print('\n')
i=0
p=""
while p != "q": # la il va falloir un autre bouton pour quitter (ou while true)
  while p!= "+" and p !="-" and p !="q":         # la on vire ces deux 
     p=input ("appuie + ou - ou q et entree : ") # lignes remplacer par l attente des boutons
  if p=="q": # si on veut q(uitter)
    break
  print(p)
  if p=="+":    # ces qutre lignes degagent 
    i=i+1         # a remplacer par les test
  else:           # sur les boutons
    i=i-1          #
  if i < 0:
    i=len(a)-1
  if i >= len(a):
    i=0
  p=""
 
  print (i)
  print (a[i])
  img=cv2.imread(a[i])
  cv2.imshow('image',img)
  cv2.waitKey(5000)
  cv2.destroyWindow("image") 

en bref : on liste le repertoire, on mets les fichiers lu dans un tableau que l on parcours avec + et - et q pour quitter. l’affichage des images en python est généralement une galère ! opencv simplifie bien le problème.

salut
je te remercie beaucoup du temps donné pour ta réponse.
cela me permet de comprendre que ce qui me manque c’est le concept de « liste »
effectivement ca l’air bien plus simple et efficace.
Je vais me mettre au boulot!