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

Python 3.7 turtle绘制正多边形宽度超出预期被压扁如何排查

问题原因

你的绘制逻辑本身没有问题,正多边形边长、旋转角度的计算都是正确的,图形被压扁是坐标系映射和窗口实际宽高比不匹配导致的:

  • 你用setworldcoordinates把逻辑坐标系设成了100x100的正方形,但turtle默认生成的窗口不是严格的正方形,横向像素数比纵向多,逻辑坐标映射到物理像素的时候,X方向的单位长度对应的实际像素比Y方向的大,就会出现水平方向被拉伸、图形压扁的情况。
  • 另外screensize设置的是画布的滚动区域大小,不是弹出窗口的实际显示尺寸,也不会影响显示比例。
修复方案

你可以修改代码保证显示的宽高比和逻辑坐标系比例一致,推荐使用以下方案:
在调用setworldcoordinates之前添加一行设置正方形窗口的代码即可:

# 第一个参数是窗口宽度像素,第二个是高度像素,设为相同值即可得到正方形窗口
turtle.setup(width=600, height=600)

调整后窗口的物理宽高比为1:1,和你设置的100x100逻辑坐标系比例一致,就不会出现拉伸变形的问题。

完整修复后参考代码
import turtle

bgColor = "teal"
worldX = 100
worldY = 100

# 新增设置正方形窗口的代码
turtle.setup(width=600, height=600)
turtle.screensize(bg=bgColor)
turtle.setworldcoordinates(0,worldX,worldY,0)
#Canvas is 100 x 100, with (0,0) being the upper left corner and (100,100) being the lower right corner

tr = turtle.Turtle()
tr.speed(6)
tr.color("black")

length = 5 #Length of sides you want
sides = 4 #Number of sides for shape

tr.penup()
tr.goto(worldX/2, worldY/2) #Go to center of canvas
tr.pendown()
for i in range(sides):
    tr.forward(length)
    tr.right(360/sides)
turtle.done()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:06:01