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

Turtle报错:'RawTurtle'对象无'delay'属性,如何实现延迟?

解决RawTurtle调用delay()方法出现AttributeError的问题

核心结论

不能直接给RawTurtle对象调用.delay()方法,因为delay()是TurtleScreen(或Screen)对象的方法,而非RawTurtle实例的方法。

问题原因

你用turtle.RawTurtle(canvas)创建的海龟对象,是绑定到自定义Tkinter Canvas的轻量级海龟实例,它本身没有控制延迟的delay()方法,延迟设置需要通过它所属的屏幕对象来操作。

解决方案

  1. 通过RawTurtle对象的.getscreen()方法获取对应的TurtleScreen实例
  2. 调用该屏幕实例的.delay()方法设置延迟(单位为毫秒)
  3. 若需要在步骤间暂停并同步更新界面,也可以结合time.sleep()和root.update()使用

修正后的代码

import turtle
import time
from customtkinter import *
from tkinter import Canvas, ttk, messagebox

root = CTk()
root.geometry('1080x680')
root.title('Tecnologia')
root.set_appearance_mode('dark')
canvas = Canvas(root, width=1080, height=480)
canvas.grid(row=0, column=0)

t = turtle.RawTurtle(canvas)
# 获取对应的屏幕对象
screen = t.getscreen()

def tricmd():
    t.home()
    t.speed(1)
    t.forward(150)
    t.left(120)
    steps.configure(text='第一步:绘制第一条边,左转120度')
    # 使用屏幕对象设置延迟
    screen.delay(500)  # 单位毫秒,这里设为500ms示例
    t.forward(150)
    t.left(120)
    steps.configure(text='第二步:绘制第二条边,再次左转120度')
    screen.delay(500)
    t.forward(150)
    t.left(120)
    steps.configure(text='第三步:绘制第三条边,回到初始方向,三角形完成')

def squarecmd():
    t.home()
    t.speed(1)
    t.forward(150)
    t.left(90)
    steps.configure(text='正方形绘制中:第一条边完成,左转90度')

def pentacmd():
    t.home()
    t.speed(1)
    t.forward(150)
    t.left(72)  # 正五边形每次左转应为72度,原代码45度错误,这里顺便修正
    steps.configure(text='五边形绘制中:第一条边完成,左转72度')

# 调整标签位置避免和按钮重叠
steps = CTkLabel(root, text='这里将讲解图形绘制步骤', width=300, height=30)
steps.grid(row=1, column=0, columnspan=2, pady=10)

triangolo = CTkButton(root, width=100, height=35, text='三角形', command=tricmd)
triangolo.grid(row=2, column=0, pady=10)
quadrato = CTkButton(root, width=100, height=35, text='正方形', command=squarecmd)
quadrato.grid(row=3, column=0, pady=10)
pentagono = CTkButton(root, width=100, height=35, text='五边形', command=pentacmd)
pentagono.grid(row=4, column=0, pady=10)

def quit_app():
    root.destroy()
quitb = CTkButton(root, width=100, height=35, text='退出', command=quit_app)
quitb.grid(row=2, column=1, pady=30)

root.mainloop()

额外说明

  • screen.delay(ms)设置的是海龟绘制每个动作后的延迟时间,数值越大,绘图越慢
  • 如果你需要在步骤间完全暂停(比如等待用户阅读讲解),可以用time.sleep(2)(暂停2秒),但要在sleep前调用root.update()确保界面更新完成
  • 顺便修正了正五边形左转角度的错误(正五边形内角对应外角为72度,原代码45度会导致图形不正确)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:40:21