Tkinter enregistrement canvas

Signaler
Messages postés
8
Date d'inscription
mardi 24 mars 2020
Statut
Membre
Dernière intervention
25 mars 2020
-
Messages postés
376
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 septembre 2020
-
Bonjour,

j'ai fait un code me permettant de prendre les coordonnées dans un fichier .dat et de faire bouger mon cercle. Le probléme est que je veux enregistrer en .gif ce deplacement pour cela je veux enregistrer chaque deplacements en format image donc si j'ai 3 deplacements je veux 4 fichier image (ensuite je peux transformer des png en gif). Dans mon code j'ai reussi à enregistrer une image qui est l'image initiale mais je ne sais pas comment enregistré toutes les images. Voici mon code :

from tkinter import *
import numpy as np
 
 
  
def move_(datay,datax, i):
    print("i=", i, "x=", datax[i],"y=" , datay[i])
    if i>= len(datax)-1:
        print("Fin")
        return
    x = datax[i]
    y = datay[i]
    Canevas.move(Balle, x, y)
    i += 1
    Mafenetre.after(500, move_, datax,datay, i)
 
 
     
Mafenetre = Tk()
Mafenetre.geometry('500x500')
  
Canevas = Canvas(Mafenetre, height=550, width=550, bg='white')
oval = Canevas.create_oval(5, 8, 480, 480)
Canevas.pack(padx=5, pady=5)
 
 
  
x0 = 495/2
y0 = 495/2
x1 = 455/2
y1 = 449/2
#
Balle = Canevas.create_oval(x0, y0, x1, y1, width=3)
 
 
def lire(file,n = 0,enc = 'utf-8'):
    x,y = [],[]
    with open(file,'r',encoding = enc) as file:
        i = 0
        for k in file:
            if i >= n:
                ligne = k.split(" ")
                y.append(float(ligne[2]))
                x.append(float(ligne[1]))
            i = i+1
    return y,x
   
y,x=lire("mon_fichier.dat",enc="latin-1")
 
x = np.array(x)
y = np.array(y)
datax = x *100
datay = y *100
 
  
 
Mafenetre.after(500, move_, datax,datay, 0) # move_(data, 0)
 
Canevas.update()
Canevas.postscript(file="fileName.ps", colormode='color')
 
def save_as_png(canvas,fileName):
    canvas.postscript(file = fileName + '.eps')
    img = Image.open(fileName + '.eps')
    img.save(fileName + '.png', 'png')
 
save_as_png(Canevas,"test")
 
Mafenetre.mainloop()
>

Ce que j'ai actuellement c'est l'image enregistré en format png de mon cercle dans sa position initiale (ce qui est normale par rapport à l'endroit ou j'ai placé les lignes de codes permettant d'enregistrer mon image) mais je voudrais pouvoir enregistrer pour chaque deplacement, une image et je ne vois pas comment faire.

Merci pour votre aide


Configuration: Linux / Chrome 80.0.3987.132

6 réponses

Messages postés
47877
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
24 septembre 2020
6 188
Bonjour,

Merci de penser à attribuer à ton code la couleur syntaxique et la forme correcte avec le bouton
<>
.
Messages postés
8
Date d'inscription
mardi 24 mars 2020
Statut
Membre
Dernière intervention
25 mars 2020
1
okay normalement c'est bon
Messages postés
8
Date d'inscription
mardi 24 mars 2020
Statut
Membre
Dernière intervention
25 mars 2020
1
En fait je suppose qu'il faut que j'integre la fonction qui enregistre mes images dans la boucle mais je ne vois pas comment. Au final je voudrais un fichier image par deplacement.
Messages postés
376
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 septembre 2020
58
Holà ekipp667,

tu as trouvé tout seul : l'appel save_as_png dans la boucle et il y a bien une boucle là-dedans, non ?

par exemple celle qui sert à déplacer la balle …

il faut prendre une photo après chaque déplacement, mais attention, il reste un truc à modifier sinon, le fichier s'appellera toujours "test", et a la fin il ne restera que la photo du dernier déplacement ...
Je suis débutant en python, mais je pense pouvoir donner un petit conseil ...

Si je serais dans votre cas, jeferait tourner deux scripts en paralèle ...
Par exemple, un qui enregistre, et un qui s'occupe du rest ...
Messages postés
376
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
25 septembre 2020
58
... ou alors tu appelles save_as_png après Canevas.move(Balle, x, y)

mais en changeant le nom du fichier png à chaque fois, sinon le fichier s'appellera toujours

"test", et a la fin il ne restera que la photo du dernier déplacement …

par exemple:

i += 1
filename= 'test_' + str(i)