是有办法让它在Windows上工作,让拿着钥匙 下创建重复的事件?
按键重复是操作系统功能,不同的系统处理它的方式不同。例如,默认情况下,我的Apple OS X系统上的按键会重复播放,但我可以进入系统偏好设置/键盘并更改速率,甚至关闭它(我试图测试以下代码。)
如果您不喜欢“T有键重复,想模拟它,下面是一个使用龟定时器事件一键启动的关键重复下来,把它关掉关键了一个简单的例子:
# import the turtle module so we can use all the neat code it contains
from turtle import Turtle, Screen
KEY_REPEAT_RATE = 20 # in milliseconds
# Create a variable `tina` that is a Turtle() object. Set shape to 'turtle'
tina = Turtle('turtle')
# Create a variable `screen`, a Screen() object, that will handle keys
screen = Screen()
# Define functions for each arrow key
def go_left():
tina.left(7)
if repeating:
screen.ontimer(go_left, KEY_REPEAT_RATE)
def go_right():
tina.right(7)
if repeating:
screen.ontimer(go_right, KEY_REPEAT_RATE)
def go_forward():
tina.forward(10)
if repeating:
screen.ontimer(go_forward, KEY_REPEAT_RATE)
def go_backward():
tina.backward(10)
if repeating:
screen.ontimer(go_backward, KEY_REPEAT_RATE)
def start_repeat(func):
global repeating
repeating = True
func()
def stop_repeat():
global repeating
repeating = False
repeating = False
# Tell the program which functions go with which keys
screen.onkeypress(lambda: start_repeat(go_left), 'Left')
screen.onkeyrelease(stop_repeat, 'Left')
screen.onkeypress(lambda: start_repeat(go_right), 'Right')
screen.onkeyrelease(stop_repeat, 'Right')
screen.onkeypress(lambda: start_repeat(go_forward), 'Up')
screen.onkeyrelease(stop_repeat, 'Up')
screen.onkeypress(lambda: start_repeat(go_backward), 'Down')
screen.onkeyrelease(stop_repeat, 'Down')
# Tell the screen to listen for key presses
screen.listen()
screen.mainloop()
然而,你的挑战是当你需要这个模拟重复时,以及当系统已经具有重复能力时 - 弄清楚这两种情况都会变得混乱。