龟有一个关键的方法

时间:2018-01-22 04:11:26

标签: python turtle-graphics

在我写的一个程序中,turtle的onkey()方法并不能完全满足我的需要。我知道还有onkeypress和onkeyrelease,但我也不需要。是否有一种方法可以在按住键的同时连续运行功能?如

import turtle
num = 0
def add():
    global num
    num += 1
    print(num)
turtle.onkey(add, "Up")
turtle.listen()
turtle.mainloop()

如果你做了这样的事情,为了获取键盘输入,onkey只响应一次,它只响应键的释放。是否有一种方法可以在按下时连续运行该功能?

1 个答案:

答案 0 :(得分:0)

下面是一个粗略的示例,它使用onkeypress()和onkeyrelease()组合进行描述。按“向上”后,它将开始计数整秒,直到您释放该键。然后它会在屏幕上写入密钥持有的整秒数:

from turtle import Turtle, Screen

FONT = ('Arial', 36, 'normal')

def add_start():
    global seconds
    print('pressed')
    if seconds < 0:
        turtle.undo()  # remove previous time
        seconds = 0
        screen.ontimer(add, 1000)

def add():
    global seconds

    if seconds >= 0:
        seconds += 1
        screen.ontimer(add, 1000)

def add_stop():
    global seconds
    print('released')
    turtle.write(seconds, align='center', font=FONT)
    seconds = -1

screen = Screen()
turtle = Turtle(visible=False)

turtle.write(0, align='center', font=FONT)

seconds = -1

screen.onkeypress(add_start, 'Up')
screen.onkeyrelease(add_stop, 'Up')

screen.listen()
screen.mainloop()

以下是捕获:您需要在系统的操作系统级别关闭密钥重复。例如,在我的Mac上,在系统偏好设置/键盘中,我会这样做:

enter image description here

否则系统将生成按下和释放事件作为标准键重复的一部分。