如何正确设置Python Turtle画布与屏幕尺寸并解决绘图异常问题
问题根源及解决方案
核心认知修正
turtle.setup(width, height, x, y):仅控制可视化弹出窗口的尺寸和屏幕显示位置,参数x/y为窗口左上角的屏幕坐标,当设置值超出当前显示器的显示范围时,操作系统会自动修正窗口的位置和大小,这是你导出的图片尺寸远小于15000的直接原因。turtle.screensize(width, height):控制Turtle底层可绘制画布的实际尺寸,只要设置正确,即使窗口显示不全,画布的完整内容依然存在。- Turtle的
circle(r)绘制逻辑:默认以海龟当前朝向的左侧垂直方向、距离r的点为圆心绘制,要得到圆心在原点的圆,需要先将海龟移动到(0, -r)位置再调用绘制方法。
你代码的具体错误
- 窗口起始位置设置为
(7500,7500),完全超出普通显示器的显示范围,被系统自动压缩窗口尺寸到11251×11251 - 黑色矩形绘制逻辑错误,最终得到的矩形中心不在原点
- 绘制圆之前没有调整海龟位置,圆心不在原点,上半部分圆超出可见区域,仅显示下半圆
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
相关产品推荐
相关产品推荐

