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
61
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
8 avril 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

4 réponses

Messages postés
61960
Date d'inscription
mardi 8 janvier 2008
Statut
Modérateur
Dernière intervention
10 avril 2020
5 503
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
61
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
8 avril 2020
17
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 ...