调整大小和保存海龟屏幕时出现问题 [英] Problem when resizing and saving a turtle screen

查看:29
本文介绍了调整大小和保存海龟屏幕时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

So I could save a big drawing and see its full size in an image visualizer, I resized my turtle window bigger then my monitor size. But the saved image is not being resized, so the drawing is being truncated:

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)

截断的图像:

推荐答案

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

By default, the tkinter canvas postscript() method only captures the visible portion of the canvas. You need to tell it, via the width and height arguments, whether you want more than that. Below is your code reworked with that fix and several others to improve the performance and/or simplify the logic:

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)

这篇关于调整大小和保存海龟屏幕时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆