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