Tkinter rafraichir une image toutes les x secondes

Bonjour,
j’aimerai afficher une image dans un canvas toutes les x secondes, j’ai pensé à une solution de ce type qui fonctionne bien au début (une dizaine de ‘cycles’ de rafraichissement) mais plante après:

self.thumb1 = PhotoImage(file='screenp1.ppm')
while(True):
         canvas_image_1.create_image(0,0, image=self.thumb1, anchor='nw')
        time.sleep(delai)
        self.thumb1 = PhotoImage(file='screenp1.ppm')

j’ai une fonction qui met l’image à jour dans le dossier (qui fonctionne bien) mais c’est le rafraichissement dans le canvas qui plante au bout d’un petit moment (l’image ne change plus dans l’appli tkinter alors qu’elle change dans le dossier).

En réfléchissant je me demande si ce n’est pas lorsqu’il essaie de récupérer l’image alors qu’elle est en train d’être réenregistrée, du coup ça fait une erreur et il plante…

Comment faire pour être sûr que photoimage ne lise pas l’image juste au moment où elle est réenregistrée dans le dossier??

Merci

:slight_smile:

Regarde par là : http://stackoverflow.com/questions/19838972/python-tkinter-update-image-in-canvas

Oui merci je comprends le principe… Mais je n’ai qu’une seule image, du coup je réfléchis pour modifier ma fonction et enregistrer 3 images et tourner dessus.

Je n’arrive pas à trouver quelque chose de satisfaisant… :confused:

Je cherche une solution pour tester l’intégrité du fichier image avant de le charger avec opencv:

img = cv2.imread('{}/screenp1.ppm'.format(CheminRecuperation_thumb),0)
if img is None:
     print "probleme chargement image"
     time.sleep(delai)
if img is not None:
     self.thumb1 = PhotoImage(file='{}/screenp1.ppm'.format(CheminRecuperation_thumb))
     self.canvas_image_1.create_image(0, 0, anchor = NW, image = self.thumb1)

Je gagne en robustesse, ça fonctionne environ 20 à 30 fois (au lieu de 5-6 fois avant), je vois bien apparaître le message ‘problème chargement image’ de temps en temps et la boucle continue et l’image se rafraichit bien.

Mais de temps en temps il y a de nouveau cette erreur de chargement avec photoimage…

y a t-il une solution d’afficher mon image avec opencv directement dans le canvas Tkinter?
Parce que lorsque je fais afficher l’image dans une fenêtre opencv à part ça fonctionne parfaitement:

while(True):
    img = cv2.imread('/home/.tmp/screenp1.ppm',0)
    if img is None:
        print "PB"

    if img is not None:
        cv2.imshow('image',img)
        print 'ok'
        cv2.waitKey(0)
        cv2.destroyAllWindows()

Merci :slight_smile:

[edit] trouvé ici:

ça marche parfaitement, c’est beaucoup mieux d’ailleurs le rafraîchissement se fait sans clignotement