I would like to figure out how to save a bitmap or vector graphics image after creating a drawing with python's turtle module. After a bit of googling I can't find an easy answer. I did find a module called canvas2svg, but I'm very new to python and I don't know how to install the module. Is there some built in way to save images of the turtle canvas? If not where do I put custom modules for python on an Ubuntu machine?

- 119,623
- 25
- 170
- 301

- 5,890
- 6
- 40
- 62
-
In the event you want to transparently save an image at the end of the program's execution (semi-useful for assisting with grading student assignments that terminate), please check out: https://github.com/ucsb-cs/cTurtle_screenshot – bboe Jan 16 '14 at 19:10
2 Answers
from tkinter import * # Python 3
#from Tkinter import * # Python 2
import turtle
turtle.forward(100)
ts = turtle.getscreen()
ts.getcanvas().postscript(file="duck.eps")
This will help you; I had the same problem, I Googled it, but solved it by reading the source of the turtle module.
The canvas (tkinter) object has the postscript function; you can use it.
The turtle module has "getscreen" which gives you the "turtle screen" which gives you the Tiknter canvas in which the turtle is drawing.
This will save you in encapsulated PostScript format, so you can use it in GIMP for sure but there are other viewers too. Or, you can Google how to make a .gif from this. You can use the free and open source Inkscape application to view .eps files as well, and then save them to vector or bitmap image files.

- 11,566
- 10
- 64
- 92

- 1,456
- 1
- 20
- 26
-
2In turtle of python 2.7, it already has postscript function. So, you don't need to import Tkinter separately. – Mohit Pandey Feb 24 '17 at 20:12
-
2I'd just like to add that the EPS file gets saved in the same place as the script is. – It's Willem Sep 07 '17 at 00:38
-
1This works, but you don't need to import Tkiner. But I need to getscreen from the instance of Turtle() – anotherjesse May 01 '20 at 22:08
I wrote the svg-turtle package that supports the standard Turtle interface from Python, and writes an SVG file using the svgwrite module. Install it with pip install svg-turtle
, and then call it like this:
from svg_turtle import SvgTurtle
def draw_spiral(t):
t.fillcolor('blue')
t.begin_fill()
for i in range(20):
d = 50 + i*i*1.5
t.pencolor(0, 0.05*i, 0)
t.width(i)
t.forward(d)
t.right(144)
t.end_fill()
def write_file(draw_func, filename, width, height):
t = SvgTurtle(width, height)
draw_func(t)
t.save_as(filename)
def main():
write_file(draw_spiral, 'example.svg', 500, 500)
print('Done.')
if __name__ == '__main__':
main()
The canvasvg package is another option. After you run some turtle code, it will convert all the items on the tkinter
canvas into an SVG file. This requires tkinter
support and a display, where svg-turtle doesn't.

- 53,582
- 27
- 205
- 286
-
1I believe you should have `draw_spiral()` --> `draw_spiral()` In `def write_file` – Mr.Weathers Feb 05 '18 at 07:59
-
1I assume you meant `draw_spiral()` --> `draw_func()`, @Mr.Weathers. You're right, that's what I meant to do, so I've fixed it. – Don Kirkby Feb 05 '18 at 20:29
-
Awesome, problem is that in this way the _Screen object loose a lot attributes because it get overridden by the SvgTurtle screen. You are loose a lot of flexibility to compose the image in several draw pass like clear() or getting the screensize and using it in your function... – diramazioni Oct 04 '20 at 21:31
-
1My new version supports a lot more features from the standard `Turtle`, @diramazioni. – Don Kirkby Jan 17 '22 at 16:59