Модуль Python Turtle - Сохранение изображения

Я хотел бы выяснить, как сохранить растровое изображение или изображение векторной графики после создания рисунка с модулем черепахи python. После небольшого поиска в Google я не могу найти простого ответа. Я нашел модуль под названием canvas2svg, но я новичок в python и не знаю как установить модуль. Есть ли какой-нибудь встроенный способ сохранения изображений холста черепахи? Если нет, где мне разместить пользовательские модули для Python на машине с Ubuntu?


person jjclarkson    schedule 01.11.2010    source источник
comment
Если вы хотите прозрачно сохранить изображение в конце выполнения программы (полуцелесообразно для помощи с оценкой завершающихся заданий учащихся), пожалуйста, проверьте: github.com/ucsb-cs/cTurtle_screenshot   -  person bboe    schedule 16.01.2014


Ответы (5)


from Tkinter import *
from turtle import *
import turtle


forward(100)
ts = turtle.getscreen()

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

Это вам поможет; У меня была такая же проблема, я погуглил, но решил, прочитав исходный код модуля черепахи.

Объект canvas (tkinter) имеет функцию postscript; вы можете использовать это.

В модуле черепахи есть экран "getscreen", который дает вам "экран черепахи", который дает вам холст Tiknter, на котором рисует черепаха.

Это сохранит вас в инкапсулированном формате PostScript, поэтому вы наверняка сможете использовать его в GIMP, но есть и другие программы просмотра. Или вы можете погуглить, как сделать из этого .gif.

person KilyenOrs    schedule 18.05.2011
comment
В черепахе Python 2.7 уже есть функция postscript. Таким образом, вам не нужно импортировать Tkinter отдельно. - person Mohit Pandey; 24.02.2017
comment
Я просто хочу добавить, что файл EPS сохраняется там же, где находится скрипт. - person It's Willem; 07.09.2017
comment
Это работает, но вам не нужно импортировать Tkiner. Но мне нужно получить экран из экземпляра Turtle () - person anotherjesse; 02.05.2020

Я написал класс SvgTurtle, который поддерживает стандартный интерфейс Turtle из Python, и записывает файл SVG с помощью svgwrite модуль. Установите svgwrite, загрузите _2 _, а затем назовите это так:

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()
person Don Kirkby    schedule 11.08.2017
comment
Я считаю, что у вас должно быть draw_spiral() - ›draw_spiral() В def write_file - person Mr.Weathers; 05.02.2018
comment
Полагаю, вы имели в виду draw_spiral() - ›draw_func(), @ Mr.Weathers. Вы правы, это то, что я хотел сделать, поэтому я исправил это. - person Don Kirkby; 05.02.2018
comment
Удивительно, проблема в том, что таким образом объект _Screen теряет множество атрибутов, потому что он переопределяется экраном SvgTurtle. Вы теряете большую гибкость, чтобы составить изображение за несколько проходов отрисовки, таких как clear () или получить размер экрана и использовать его в своей функции ... - person diramazioni; 05.10.2020

У меня не работает. Как сделать так, чтобы вывод сохранялся перед каждой очисткой экрана?

from turtle import *
from random import *
import time

def randomcolour():

  colormode(255)
  red = randint(0, 255)
  green = randint(0, 255)
  blue = randint(0, 255)
  color(red, green, blue)

def randomplace():
  penup()
  x = randint(-100, 100)
  y = randint(-100, 100)
  goto(x, y)
  pendown()

def randomheading():
  heading = randint(0, 360)
  setheading(heading)

def drawrectangle():
  randomcolour()
  randomplace()
  hideturtle()
  length = randint(10, 100)
  height = randint(10, 100)
  begin_fill()
  forward(length)
  right(90)
  forward(height)
  right(90)
  forward(length)
  right(90)
  forward(height)
  right(90)
  end_fill()

shape("turtle")
speed(0)

for i in range(1, 30):
  randomcolour()
  randomplace()
  randomheading()
  stamp()



def drawcircle():
  radius = randint(5, 100)
  randomcolour()
  randomplace()
  dot(radius)

def drawstar():
  randomcolour()
  randomplace()
  randomheading()
  begin_fill()
  size = randint(20, 100)

  for side in range(5):
    left(144)
    forward(size)

  end_fill()


clear()
setheading(0)

for i in range(20):
  drawrectangle()

clear()

for i in range(50):
  drawcircle()

clear()

for i in range(20):

  sleep(5000)
  drawstar()
person MadeBy Alvaropop    schedule 16.02.2021

Чтобы сохранить изображение черепахи, вы открываете python, пишете код черепахи и нажимаете Ctrl shift s. В окне появится всплывающее окно. Дважды щелкните python3.9, затем дважды щелкните Lib. Продолжайте прокручивать вниз и под модулем Tkinter будет демо-папка turtle. Дважды щелкните по нему, и вы можете сохранить файлы черепахи.

person python basics    schedule 06.06.2021
comment
Я отредактировал ваш пост, но в будущем предлагаю вам научиться использовать . (точки) вместо повторяющихся предложений. Это помогает пользователю перевести дух при чтении. Хотя я ценю время, которое вы вложили в этот пост, чтобы сделать его очень подробным. Держись! Не сдавайся! - person BuddyBob; 06.06.2021