You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Python Turtle绘图设置合适的四周内边距?

解决Python Turtle绘制赫斯特风格画作的内边距问题

问题核心

要实现屏幕四周50单位的均匀留白,需理清画布尺寸、世界坐标映射以及海龟移动逻辑三者的对应关系,原代码的坐标设置和移动距离不匹配,导致内容贴边。

修正步骤及代码解析

1. 坐标系统调整

设置世界坐标与画布尺寸完全对应,让屏幕左下角对应世界坐标(0,0)、右上角对应(500,500),后续将绘制内容限制在(50,50)到(450,450)区间,自然形成四周50单位留白:

ts.screensize(500, 500)  # 设定画布实际尺寸
ts.setworldcoordinates(0, 0, 500, 500)  # 对齐世界坐标与画布尺寸

2. 海龟起始位置校准

让海龟直接移动到绘制区域的左下角起点(内边距50的位置):

t.goto(50, 50)

3. 修正移动逻辑

原代码横向回退距离错误,10个点的横向总跨度为9*50=450,需将t.fd(500)改为t.fd(450),确保回到下一行的正确起始位置:

def go_back_up1():
    t.left(90)
    t.fd(50)  # 向上移动一行的间距
    t.left(90)
    t.fd(450)  # 修正横向回退距离
    t.right(180)  # 转向,准备绘制下一行

4. 避免重复创建Screen实例

原代码末尾重复创建Screen()实例,直接复用已定义的ts即可:

ts.getcanvas().winfo_toplevel().attributes("-topmost", True)
ts.exitonclick()

完整修正代码

# import/set up turtle/screen
from turtle import Turtle, Screen
import random

t = Turtle()
ts = Screen()
ts.resetscreen()

t.shape("turtle")
t.color("DarkBlue")
ts.colormode(255)

# 修正屏幕尺寸与坐标映射
ts.screensize(500, 500)
ts.setworldcoordinates(0, 0, 500, 500)

# generate random colors from color_list
def random_color():
    color_list = [(118, 185, 170), (115, 160, 200), (215, 228, 239), (192, 137, 173), (237, 225, 205), (190, 220, 208)]
    rand_color = random.choice(color_list)
    return rand_color

# maps out movement
# paints random colors with movement
t.up()
t.speed(0)
# 移动到绘制起始点(内边距50的位置)
t.goto(50, 50)

def each_line():
    t.dot(20, random_color())
    t.fd(50)

def go_back_up1():
    t.left(90)
    t.fd(50)
    t.left(90)
    t.fd(450)  # 修正回退距离
    t.right(180)

for _ in range(10):
    for _ in range(10):
        each_line()
    go_back_up1()

# 实现导出为JPG的拉伸目标(需提前安装PIL库)
def save_as_jpg(filename="hirst_painting.jpg", quality=95):
    from PIL import Image
    # 先保存为PostScript格式
    ps_filename = filename.replace(".jpg", ".ps")
    ts.getcanvas().postscript(file=ps_filename)
    # 转换为JPG
    img = Image.open(ps_filename)
    img.save(filename, "JPEG", quality=quality)

# 调用保存函数(可选)
# save_as_jpg()

ts.getcanvas().winfo_toplevel().attributes("-topmost", True)
ts.exitonclick()

拉伸目标实现说明

导出JPG需依赖PIL库(执行pip install pillow安装),新增的save_as_jpg函数先将画布内容保存为PostScript文件,再转换为JPG,可通过quality参数控制图片质量(1-100,数值越高质量越好)。

内容的提问来源于stack exchange,提问作者JustinPhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:45:59