2010-11-01 14 views
19

Me gustaría descubrir cómo guardar un mapa de bits o una imagen de gráficos vectoriales después de crear un dibujo con el módulo de tortugas de pitón. Después de buscar en Google no puedo encontrar una respuesta fácil. Encontré un módulo llamado canvas2svg, pero soy muy nuevo en Python y no sé cómo instalar el módulo. ¿Hay alguna forma de guardar imágenes del lienzo de tortuga? Si no, ¿dónde pongo módulos personalizados para Python en una máquina Ubuntu?Módulo de tortugas de Python: guardar una imagen

+0

En el caso de que desee guardar de forma transparente una imagen al final de la ejecución del programa (semi-útil para ayudar con tareas de los estudiantes de calificaciones que terminan), echa un vistazo a: https://github.com/ucsb-cs/cTurtle_screenshot – bboe

Respuesta

24
from Tkinter import * 
from turtle import * 
import turtle 


forward(100) 
ts = turtle.getscreen() 

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

Esto te ayudará; Tuve el mismo problema, lo busqué en Google, pero lo resolví leyendo la fuente del módulo de tortuga.

El objeto canvas (tkinter) tiene la función postscript; puedes usarlo.

El módulo de tortuga tiene "getscreen" que le da la "pantalla de tortuga" que le da el lienzo Tiknter en el que está dibujando la tortuga.

Esto lo guardará en formato PostScript encapsulado, para que pueda usarlo en GIMP, pero también hay otros espectadores. O bien, puede buscar en Google cómo hacer un .gif a partir de esto.

+2

En turtle of python 2.7, ya tiene la función PostScript. Por lo tanto, no es necesario importar Tkinter por separado. –

+0

Me gustaría agregar que el archivo EPS se guarda en el mismo lugar que el script. –

0

Escribí una clase SvgTurtle que admite la interfaz estándar de Turtle de Python, y escribe un archivo SVG usando el módulo svgwrite. Instalar svgwrite, descarga svg_turtle.py, y luego llamar así:

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

Creo que debería tener 'draw_spiral()' -> 'draw_spiral()' En 'def write_file' –

+0

Supongo que quería decir' draw_spiral() '->' draw_func() ', @ Mr.Weathers. Tienes razón, eso es lo que pretendía hacer, así que lo solucioné. –

Cuestiones relacionadas