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

如何正确设置Python Turtle画布与屏幕尺寸并解决绘图异常问题

问题根源及解决方案

核心认知修正

  • turtle.setup(width, height, x, y):仅控制可视化弹出窗口的尺寸和屏幕显示位置,参数x/y为窗口左上角的屏幕坐标,当设置值超出当前显示器的显示范围时,操作系统会自动修正窗口的位置和大小,这是你导出的图片尺寸远小于15000的直接原因。
  • turtle.screensize(width, height):控制Turtle底层可绘制画布的实际尺寸,只要设置正确,即使窗口显示不全,画布的完整内容依然存在。
  • Turtle的circle(r)绘制逻辑:默认以海龟当前朝向的左侧垂直方向、距离r的点为圆心绘制,要得到圆心在原点的圆,需要先将海龟移动到(0, -r)位置再调用绘制方法。

你代码的具体错误

  1. 窗口起始位置设置为(7500,7500),完全超出普通显示器的显示范围,被系统自动压缩窗口尺寸到11251×11251
  2. 黑色矩形绘制逻辑错误,最终得到的矩形中心不在原点
  3. 绘制圆之前没有调整海龟位置,圆心不在原点,上半部分圆超出可见区域,仅显示下半圆
  4. postscript导出时没有指定画布偏移,默认仅导出窗口可见区域,没有导出完整15000×15000的画布内容

修正后的完整代码

import turtle
from PIL import Image
import os
import tkinter as tk

# 提前隐藏Tkinter窗口,避免系统自动裁剪窗口尺寸
root = tk.Tk()
root.withdraw()

Image.MAX_IMAGE_PIXELS = None

# 初始化画布,直接设置画布尺寸为15000×15000
screen = turtle.Screen()
screen.screensize(15000, 15000)
screen.tracer(False)

t = turtle.Turtle()
t.hideturtle()
t.speed(0)

# 绘制中心在原点、尺寸15000×15000的黑色填充矩形
t.pen(pensize=2, pencolor='black')
t.color('black')
t.begin_fill()
t.penup()
t.goto(-7500, 7500)
t.pendown()
t.setheading(0)
for _ in range(4):
    t.forward(15000)
    t.right(90)
t.end_fill()

# 绘制中心在原点、半径4000的白色圆形
t.penup()
t.goto(0, -4000)
t.pendown()
t.pen(pencolor='white', pensize=5)
t.circle(4000)

# 导出完整画布
fileName = "test"
seedString = fileName
canvas = screen.getcanvas()
# 指定导出区域的左下角坐标、宽高,覆盖完整15000×15000画布
canvas.postscript(file=fileName, width=15000, height=15000, x=-7500, y=-7500)

# 转换为JPG,确保输出尺寸准确
img = Image.open(fileName)
img = img.resize((15000, 15000), Image.Resampling.LANCZOS)
img.save(f"{seedString}.jpg", dpi=(300, 300))
img.close()

os.system(f'move "{fileName}" somefilelocation')
os.system(f'move "{seedString}.jpg" somefilelocation')

turtle.bye()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:06:03