【问题标题】:How to generate a key hold & press event in Python on Windows如何在 Windows 上的 Python 中生成按键按住和按下事件
【发布时间】:2013-05-07 20:41:29
【问题描述】:

我正在尝试编写一个程序,以便当我按下游戏手柄上的按钮并按住它时,只要按住按钮,就会写入并重复某个字符,就像键盘工作一样。

到目前为止,我已经设法插入任何我想要的字符,但最难的部分是按住它。

我尝试使用 pyGame、win32api、win32con,但找不到任何有用的东西。 (可能我对这些库没有完全了解)

此外,我是 python 编程的新手,所以如果您需要更多信息以使我的问题更容易理解,请告诉我。

谢谢。

【问题讨论】:

    标签: python windows events python-2.7 keyboard


    【解决方案1】:

    对于 pygame 试试这个: http://www.pygame.org/docs/ref/key.html#pygame.key.set_repeat

    在我看来,正是您正在寻找的东西。

    如果您不想以这种方式解决它,则必须编写一个线程,该线程从按键按下事件开始,在按键释放事件时停止,并在调用按键事件时一遍又一遍地调用自身。这看起来像这样:

    from threading import Thread, Event
    from time import sleep
    
    class BtnRepeater(Thread)
        def __init__(self, *args, **kw):
            self.stop = Event()
            if 'startdelay' in kw:
                self.stdelay = kw.pop('startdelay')
            else:
                self.stdelay = 1 default delay
            if 'repeatdelay' in kw:
                self.rpdelay = kw.pop('startdelay')
            else:
                self.rpdelay = 0.2 default delay
    
            Thead.__init__(self, *args, **kw)
    
        def run(self):
            sleep(self.stdelay)
            while not self.stop.is_set():
                # invoke event here
                sleep(self.rpdelay)
    
    def event_handler_btn_down(event):
        # needs to be binded somewhen
        br = BtnRepeater()
        bind(event.key,'key_release',br.stop.set) # this is no real pygame call - but you probably know what I'm talking about
        br.start()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2013-06-07
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多