2010-11-01 23 views
19

Chciałbym dowiedzieć się, jak zapisać bitmapę lub obraz grafiki wektorowej po utworzeniu rysunku z modułem żółwia Pythona. Po odrobinie googlowania nie mogę znaleźć łatwej odpowiedzi. Znalazłem moduł o nazwie canvas2svg, ale jestem bardzo nowy dla Pythona i nie wiem jak zainstalować moduł. Czy jest jakiś zbudowany w taki sposób, aby zapisać obrazy płótna żółwia? Jeśli nie, gdzie umieścić niestandardowe moduły dla Pythona na komputerze z Ubuntu?Moduł Żółwia Pythona - Zapisywanie obrazu

+0

W przypadku chcesz przejrzyście zapisać obraz na koniec realizacji programu (pół-użyteczne do pomocy z zadaniami studenckich klasyfikacji, które kończą), proszę sprawdzić: https://github.com/ucsb-cs/cTurtle_screenshot – bboe

Odpowiedz

24
from Tkinter import * 
from turtle import * 
import turtle 


forward(100) 
ts = turtle.getscreen() 

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

To ci pomoże; Miałem ten sam problem, przeglądałem go, ale rozwiązałem go, czytając źródło modułu żółwia.

Obiekt canvas (tkinter) ma funkcję postscript; możesz tego użyć.

Moduł żółwia ma "getcreen", który daje "ekran żółwia", który daje płótno Tiknter, w którym rysuje żółw.

To pozwoli Ci zaoszczędzić w postaci enkapsulowanego formatu PostScript, więc możesz go używać w GIMP-ie, ale są też inni widzowie. Lub możesz Google, jak zrobić .gif z tego.

+2

W żółwi Pythona 2.7, ma już funkcję PostScript. Nie musisz importować Tkintera osobno. –

+0

Chciałbym tylko dodać, że plik EPS zostanie zapisany w tym samym miejscu co skrypt. –

0

Napisałem klasę SvgTurtle, która obsługuje standardowy interfejs Turtle z Python i zapisuje plik SVG przy użyciu modułu svgwrite. Zainstalować svgwrite, pobierz svg_turtle.py, a następnie nazwać tak:

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

Wierzę, że powinieneś mieć 'draw_spiral()' -> 'draw_spiral()' W 'def write_file' –

+0

Zakładam, że chodziło o' draw_spiral() '->' draw_func() ', @ Mr.Weathers. Masz rację, właśnie to miałem zamiar zrobić, więc naprawiłem to. –