Python Pygame在未按下按键时读取多个按键事件?

Python Pygame在未按下按键时读取多个按键事件?,python,pygame,keydown,Python,Pygame,Keydown,我一直在尝试为pygame开发一个“文本框”类,作为一个小的个人项目,我遇到了一个真正困扰我的问题。我试图扩展找到的pygame文本输入类,将其包装在一个文本框类中,该类支持多行,并希望支持滚动功能 我的问题出现在试图在文本行之间上下移动闪光灯时。基本上,按下“向上”箭头一次,眨眼器就会一直移动到顶部,然后它就不再响应向下移动 下面是我如何给pygame\u文本框类事件的代码: while True: events = pygame.event.get() for event

我一直在尝试为pygame开发一个“文本框”类,作为一个小的个人项目,我遇到了一个真正困扰我的问题。我试图扩展找到的pygame文本输入类,将其包装在一个文本框类中,该类支持多行,并希望支持滚动功能

我的问题出现在试图在文本行之间上下移动闪光灯时。基本上,按下“向上”箭头一次,眨眼器就会一直移动到顶部,然后它就不再响应向下移动

下面是我如何给
pygame\u文本框
类事件的代码:

while True:

    events = pygame.event.get()

    for event in events:


        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    test_box.update(events)
    test_box_2.update(events)

    test_box.draw(screen, (100, 100))
    test_box_2.draw(screen, (200, 250))

    pygame.display.update()
下面是文本框类的代码(
event
来自上述代码):

如果event.type==pl.KEYDOWN:
如果self.u处于活动状态:
打印(“在文本框中读取:{}”。格式(事件))
如果event.key==pl.K\u UP且self.cursor\u line>0:
self.cursor\u line-=1
打印(“光标向上移动到{}”。格式(self.cursor\u行))
如果event.key==pl.K\u DOWN和self.cursor\u line
试图调试它似乎表明
pygame.event.get()
队列接收的
KEYDOWN
事件比预期的要多;一次按下按钮发送多个(有时是正在进行的)事件。我是pygame新手,但我很确定
KEYDOWN
事件不应该发生这种情况,对吗?每次按下一个键时,应该只触发一个事件。我做错了什么?这是pygame本身的一个bug吗


谢谢你能提供的帮助。我对这方面还不太熟悉,我希望我的问题是正确的

只需查看您在问题中链接的
pygame\u textinput
模块:

    # Update key counters:
    for key in self.keyrepeat_counters:
        self.keyrepeat_counters[key][0] += self.clock.get_time()  # Update clock

        # Generate new key events if enough time has passed:
        if self.keyrepeat_counters[key][0] >= self.keyrepeat_intial_interval_ms:
            self.keyrepeat_counters[key][0] = (
                self.keyrepeat_intial_interval_ms
                - self.keyrepeat_interval_ms
            )

            event_key, event_unicode = key, self.keyrepeat_counters[key][1]
            pygame.event.post(pygame.event.Event(pl.KEYDOWN, key=event_key, unicode=event_unicode))

如您所见,是
TextInput
update
方法通过将关键事件再次发布到pygame的事件队列来重复这些事件。

请查看您在问题中链接的
pygame\u TextInput
模块:

    # Update key counters:
    for key in self.keyrepeat_counters:
        self.keyrepeat_counters[key][0] += self.clock.get_time()  # Update clock

        # Generate new key events if enough time has passed:
        if self.keyrepeat_counters[key][0] >= self.keyrepeat_intial_interval_ms:
            self.keyrepeat_counters[key][0] = (
                self.keyrepeat_intial_interval_ms
                - self.keyrepeat_interval_ms
            )

            event_key, event_unicode = key, self.keyrepeat_counters[key][1]
            pygame.event.post(pygame.event.Event(pl.KEYDOWN, key=event_key, unicode=event_unicode))

正如您所看到的,是
TextInput
update
方法通过将关键事件再次发布到pygame的事件队列来重复这些事件。

textbox类如何在事件中循环?它会多次处理同一事件吗?textbox类是如何循环处理这些事件的?它能多次处理同一事件吗?谢谢,就是这样!当我抓住它的时候,我应该看到我的头撞到桌子上。谢谢,就是它!当我抓住它的时候,我应该看到我的头撞到桌子上。