Thonny中使用turtle模块绘图时窗口冻结且仅绘制单边问题求助
问题分析与修复
核心错误点
- 转向角度计算完全颠倒:
draw_polygon里的angle = n_sides / 360是致命错误——正多边形每次转向角度应该是360 / n_sides。用原代码的话,6边形每次只转0.016°,乌龟几乎不转向,一直往同一个方向爬,程序陷入无意义的循环,直接导致窗口冻结。 - 边长计算公式逻辑错误:
side_length里的角度推导错了,正多边形边心距(你定义的height)和边长的正确关系是:边长 = 2 * height * tan(π / 边数),原公式算出的边长完全不符合预期。 - 缺少窗口事件循环:代码末尾没加
wn.mainloop(),要么绘图后窗口直接闪退,要么循环卡住时窗口彻底冻结。
修复后的完整代码
import turtle import math wn = turtle.Screen() ted = turtle.Turtle() def side_length(n_sides, height): '''返回正多边形的边长''' tan_angle = math.pi / n_sides length = 2 * height * math.tan(tan_angle) return length def draw_polygon(a_turtle, n_sides, height): '''绘制正多边形''' length_polygon = side_length(n_sides, height) angle = 360 / n_sides for i in range(n_sides): a_turtle.forward(length_polygon) a_turtle.left(angle) draw_polygon(ted, 6, 50) # 保持窗口打开,直到手动关闭 wn.mainloop()
修复说明
- 把转向角度改成
360 / n_sides,确保乌龟每次转正确的角度(比如6边形每次转60°),能完整画出多边形。 - 修正边长计算公式,让边心距和边长的对应关系符合正多边形的几何规则。
- 添加
wn.mainloop()启动窗口事件循环,绘图完成后窗口会保持打开状态,不会闪退或无响应。
内容的提问来源于stack exchange,提问作者Santiago Sánchez
相关产品推荐
相关产品推荐

