Tkinter enregistrement canvas

Fermé
ekip667 Messages postés 8 Date d'inscription mardi 24 mars 2020 Statut Membre Dernière intervention 25 mars 2020 - Modifié le 24 mars 2020 à 18:11
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 1 août 2020 à 10:55
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
A voir également:

6 réponses

Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 335
24 mars 2020 à 18:05
Bonjour,

Merci de penser à attribuer à ton code la couleur syntaxique et la forme correcte avec le bouton
<>
.
1
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
1 août 2020 à 10:55
... 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)
1
ekip667 Messages postés 8 Date d'inscription mardi 24 mars 2020 Statut Membre Dernière intervention 25 mars 2020 1
Modifié le 24 mars 2020 à 18:10
okay normalement c'est bon
0
ekip667 Messages postés 8 Date d'inscription mardi 24 mars 2020 Statut Membre Dernière intervention 25 mars 2020 1
24 mars 2020 à 21:09
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
25 mars 2020 à 18:25
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 ...
0
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 ...
0