2010-11-01 26 views
19

Je voudrais savoir comment enregistrer une image bitmap ou une image graphique vectorielle après avoir créé un dessin avec le module tortue de python. Après un peu de googling je ne peux pas trouver une réponse facile. J'ai trouvé un module appelé canvas2svg, mais je suis très nouveau sur python et je ne sais pas comment installer le module. Y a-t-il un moyen intégré de sauvegarder les images de la toile de la tortue? Sinon, où dois-je mettre des modules personnalisés pour python sur une machine Ubuntu?Python Turtle Module- Enregistrement d'une image

+0

Dans le cas où vous souhaitez enregistrer en toute transparence une image à la fin de l'exécution du programme (semi-utile pour aider à des travaux d'étudiants de notation qui mettent fin), S'il vous plaît vérifier: https://github.com/ucsb-cs/cTurtle_screenshot – bboe

Répondre

24
from Tkinter import * 
from turtle import * 
import turtle 


forward(100) 
ts = turtle.getscreen() 

ts.getcanvas().postscript(file="duck.eps") 

Cela vous aidera; J'ai eu le même problème, je l'ai googlé, mais l'ai résolu en lisant la source du module de tortue.

L'objet canvas (tkinter) a la fonction postscript; tu peux l'utiliser. Le module de tortue a "écran" qui vous donne le "écran tortue" qui vous donne la toile Tiknter dans lequel la tortue dessine. Cela vous permettra d'économiser au format PostScript encapsulé, de sorte que vous pouvez l'utiliser dans GIMP, mais il y a aussi d'autres visionneuses. Ou, vous pouvez Google comment faire un .gif à partir de cela.

+2

En tortue de python 2.7, il a déjà une fonction postscript. Ainsi, vous n'avez pas besoin d'importer Tkinter séparément. –

+0

Je voudrais juste ajouter que le fichier EPS est enregistré au même endroit que le script. –

0

J'ai écrit une classe SvgTurtle qui prend en charge l'interface Turtle standard de Python, et écrit un fichier SVG en utilisant le module svgwrite. Installer svgwrite, téléchargez svg_turtle.py, puis l'appeler comme ceci:

from turtle import * # @UnusedWildImport 

import svgwrite 

from svg_turtle import SvgTurtle 


def draw_spiral(): 
    fillcolor('blue') 
    begin_fill() 
    for i in range(20): 
     d = 50 + i*i*1.5 
     pencolor(0, 0.05*i, 0) 
     width(i) 
     forward(d) 
     right(144) 
    end_fill() 


def write_file(draw_func, filename, size): 
    drawing = svgwrite.Drawing(filename, size=size) 
    drawing.add(drawing.rect(fill='white', size=("100%", "100%"))) 
    t = SvgTurtle(drawing) 
    Turtle._screen = t.screen 
    Turtle._pen = t 
    draw_func() 
    drawing.save() 


def main(): 
    write_file(draw_spiral, 'example.svg', size=("500px", "500px")) 
    print('Done.') 


if __name__ == '__main__': 
    main() 
+0

Je crois que vous devriez avoir 'draw_spiral()' -> 'draw_spiral()' Dans 'def fichier_écriture' –

+0

Je suppose que vous vouliez dire' draw_spiral() '->' draw_func() ', @ Mr.Weathers. Tu as raison, c'est ce que je voulais faire, donc je l'ai réparé. –