在python pyglet中按下按钮时执行操作

时间:2019-03-04 17:11:22

标签: python pyglet

addRoute

此功能仅打印一次,但是我想在按住UP按钮的同时向上打印。

2 个答案:

答案 0 :(得分:1)

您需要在on_key_press之外进行此检查。
因为该函数是仅在触发按键DOWN事件时才调用的单次函数。而且该触发器仅在操作系统中执行一次。

因此,您需要保存一个DOWN状态on_key_press,并将按下的键保存在一个变量中,该变量位于(以下简称为{ {1}})
随后,您还需要处理任何self.keys事件,在我的以下示例中,这些事件是在RELEASE中完成的。

这是可以将它们绑在一起的方式:

on_key_release

答案 1 :(得分:0)

似乎 pyglet 为这个用例引入了一个事件处理程序:https://pyglet.readthedocs.io/en/latest/programming_guide/keyboard.html#remembering-key-state。文档中的代码示例:

from pyglet.window import key

window = pyglet.window.Window()
keys = key.KeyStateHandler()
window.push_handlers(keys)

# Check if the spacebar is currently pressed:
if keys[key.SPACE]:
    pass

如果您想从 pyglet.window.Window 继承子类,这将是一种可能的方法:

import pyglet
from pyglet.window import key

class MyWindow(pyglet.window.Window):

    def __init__(self):
        super(MyWindow, self).__init__()

        self.key_handler = key.KeyStateHandler()
        self.push_handlers(self.key_handler)

    def on_draw(self):
        self.clear()

    def update(self, _):
        if self.key_handler[key.UP]:
            print('UP key pressed')

if __name__ == '__main__':
    mygame = MyWindow()
    pyglet.clock.schedule_interval(mygame.update, 1/60)
    pyglet.app.run()