【问题标题】:Problem when resizing and saving a turtle screen调整和保存海龟屏幕时出现问题
【发布时间】:2019-04-13 17:43:45
【问题描述】:

所以我可以保存一张大图并在图像可视化器中查看它的完整尺寸,我将海龟窗口的大小调整为比显示器大小更大。但是保存的图像没有被调整大小,所以绘图被截断:

from turtle import Screen, Turtle
import random

screen = Screen()
screen.setup(width=1200, height=2700, startx=None, starty=None)
t = Turtle(visible=False)
t.speed('fastest')  # because I have no patience

t2 = Turtle(visible=False)
t2.speed('fastest')  # because I have no patience

t3 = Turtle(visible=False)
t3.speed('fastest')  # because I have no patience


def got(x, y, d):  # to use goto more easily
    t.penup()
    t.goto(x, y)
    t.pendown()
    t.seth(d)


def flatoval(r):  # Horizontal Oval
    t.right(45)
    for loop in range(2):
        t.circle(r, 90)
        t.circle(r / 2, 90)


got(0, -200, 0)


def elipse(r, a, b, c):
    for extent in range(9):
        rnd = random.randint(1, 20)
        # if extent == 0 or extent == 3 or extent == 6 :
        # t.color('red')
        # if extent == 1 or extent == 4 or extent == 7 :
        # t.color('yellow')
        # if extent == 2 or extent == 5 or extent == 8 :
        # t.color('blue')

        t.circle(r, 10)

        heading = t.heading()

        if extent == 0 or extent == 1 or extent == 2:
            # t.color('green')
            t.setheading(0)
            t.forward(rnd)
            t.forward(a)
            t.backward(rnd)
            t.forward(c)

        t.setheading(heading)


def canais(x, y, d, egnar):
    for tog in range(egnar):
        got(x, y, d)

        elipse(100, 0, 0, 0)
        elipse(50, 0, 0, 0)
        elipse(100, 0, 0, 0)
        elipse(50, 0, 0, 0)
        d = d + 10
        elipse(200, 0, 0, 0)
        elipse(100, 0, 0, 0)
        elipse(200, 0, 0, 0)
        elipse(100, 0, 0, 0)

        elipse(300, 0, 0, 0)
        elipse(200, 0, 0, 0)
        elipse(300, 0, 0, 0)
        elipse(200, 0, 0, 0)


canais(0, -100, 0, 40)

ts = t.getscreen()

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

我也尝试过这个改变:

screen = Screen()
screen.setup(width=1200, height=2700, startx=None, starty=None)

代替:

screen = Screen()
screen.setup(400, 500)

截断的图像:

【问题讨论】:

    标签: python python-3.x turtle-graphics


    【解决方案1】:

    默认情况下,tkinter 画布postscript() 方法仅捕获画布的可见 部分。您需要通过 widthheight 参数告诉它,您是否想要更多。以下是使用该修复程序和其他一些修复程序重新编写的代码,以提高性能和/或简化逻辑:

    from turtle import Screen, Turtle
    from random import randint
    
    def got(x, y, d):  # to use goto more easily
        turtle.penup()
        turtle.goto(x, y)
        turtle.pendown()
        turtle.setheading(d)
    
    def flatoval(r):  # Horizontal Oval
        turtle.right(45)
    
        for _ in range(2):
            turtle.circle(r, 90)
            turtle.circle(r / 2, 90)
    
    def elipse(r, a, b, c):
        for extent in range(9):
            rnd = randint(1, 20)
    
            turtle.circle(r, 10)
    
            heading = turtle.heading()
    
            if extent <= 2:
                turtle.setheading(0)
                turtle.forward(rnd)
                turtle.forward(a)
                turtle.backward(rnd)
                turtle.forward(c)
    
            turtle.setheading(heading)
    
    def canais(x, y, d, egnar):
        for _ in range(egnar):
            got(x, y, d)
    
            elipse(100, 0, 0, 0)
            elipse(50, 0, 0, 0)
            elipse(100, 0, 0, 0)
            elipse(50, 0, 0, 0)
    
            elipse(200, 0, 0, 0)
            elipse(100, 0, 0, 0)
            elipse(200, 0, 0, 0)
            elipse(100, 0, 0, 0)
    
            elipse(300, 0, 0, 0)
            elipse(200, 0, 0, 0)
            elipse(300, 0, 0, 0)
            elipse(200, 0, 0, 0)
    
            d += 10
    
    screen = Screen()
    screen.setup(1200, 1200)
    
    turtle = Turtle(visible=False)
    
    got(0, -200, 0)
    
    screen.tracer(False)
    canais(0, -100, 0, 36)
    screen.tracer(True)
    
    canvas = screen.getcanvas()
    
    canvas.postscript(file="canais_organizados_separadamente.eps", width=1200, height=1200)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-26
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多