Turtle 给出错误:AttributeError: 'Turtle' 对象没有属性 'onkeyrelease'

问题描述 投票:0回答:1

我每次释放按键时都会尝试添加 1:

from turtle import *
import turtle
turtle1 = Turtle()
screen = turtle1.getscreen()
goPressed = False

进口海龟...

currentWatts=0

def onaclicked():
     global currentWatts
     currentWatts+=1
     print (currentWatts)

定义了当按键 1 被释放时运行的函数

turtle.onkeyrelease(onaclicked, "1")

出于某种原因,即使我导入了 Turtle 并检查了 Python 文档,

onkeyrelease
也不存在。它应该有效,不是吗?是我导入不当吗?你能帮我吗?

我希望它是

onkeyrelease
而不是
onkey
的原因是因为它是一个游戏。使用
onkey
时,当您将手指按住按键时,电流瓦数大约每 0.25 秒增加 1。你可以通过在按键上放置一些东西来作弊,所以我希望它只在你释放按键时加 1。

python turtle-graphics python-turtle
1个回答
1
投票

您的代码存在几个问题:您以两种不同的方式导入海龟,这使事情变得混乱;

onkeyrelease()
实际上是屏幕/窗口的方法,而不是乌龟;您没有调用
listen()
来允许处理击键。以下内容应该在 Python 3 中工作:

from turtle import Turtle, Screen, mainloop

def onaclicked():
    global currentWatts
    currentWatts += 1
    print(currentWatts)

currentWatts = 0

screen = Screen()

screen.onkeyrelease(onaclicked, "1")

screen.listen()

mainloop()

在开始输入之前,请务必单击窗口一次以将其激活。

如果您使用的是 Python 2(我从您收到的错误消息中怀疑这一点),请将 Python 3 别名

onkeyrelease
替换为
onkey

添加了 Screen.onkeypress() 方法作为对 Screen.onkey() 实际上将操作绑定到 keyrelease 事件。 因此后者有一个别名:Screen.onkeyrelease()。

此更改在两个版本中应该是相同的。使用

onkeyrelease
而不是
onkey
并不能解决您在关键问题上的问题。

当您将手指放在琴键上时,它会加 1 每大约 0.25 秒一次电流瓦特。你可以通过放置来作弊 按键上有一些东西,所以我希望它只在你松开时加 1

自动按键重复似乎是由操作系统处理的,可能需要在 Python 外部禁用,具体取决于操作系统。一些示例链接:

© www.soinside.com 2019 - 2024. All rights reserved.