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

Turtle库报错_tkinter.TclError及onkey属性缺失问题求助

问题修复方案

第一个报错:_tkinter.TclError: bad event type or keysym "ButtonLeft"

你用onrelease绑定键盘按键是错误的——这个方法是用来绑定鼠标释放事件的,必须传入鼠标按键的标识,比如左键对应<ButtonRelease-1>、右键对应<ButtonRelease-3>。你把键盘的"Left"传入,自然会触发类型不匹配的报错。

如果要绑定键盘按键的释放事件,应该使用turtle.Screen()对象的onkeyrelease方法,而非turtle实例的onrelease。

第二个问题:'Turtle' object has no attribute 'onkey'

onkey是**屏幕对象(Screen)**的专属方法,不是你创建的turtle实例(即变量a)的方法。必须先获取屏幕对象,再调用它的onkey或onkeyrelease方法。

修复后的完整代码示例

import turtle

# 创建turtle实例和屏幕对象
a = turtle.Turtle()
screen = turtle.Screen()

def left():
    a.bk(25)
def right():
    a.fd(25)
def up():
    a.lt(90)
    a.fd(25)
    a.rt(90)
def down():
    a.rt(90)
    a.fd(25)
    a.lt(90)

# 用屏幕对象绑定键盘按键(按下时触发)
screen.onkey(left, "Left")
screen.onkey(right, "Right")
screen.onkey(up, "Up")
screen.onkey(down, "Down")

# 若需要绑定按键释放事件,替换为以下代码
# screen.onkeyrelease(left, "Left")
# screen.onkeyrelease(right, "Right")
# screen.onkeyrelease(up, "Up")
# screen.onkeyrelease(down, "Down")

# 启动键盘监听
screen.listen()

# 保持窗口运行,避免程序直接退出
turtle.done()

额外注意事项

  • 删除原代码中的while True循环,turtle的事件监听不需要手动写死循环,screen.listen()和turtle.done()会自动处理事件循环逻辑。
  • 如果确实需要绑定鼠标释放事件(比如左键松开后执行函数),正确写法是a.onrelease(left, "<ButtonRelease-1>"),但这和你绑定键盘按键的需求不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:25:21