【发布时间】:2019-11-15 00:27:38
【问题描述】:
我一直在尝试为 pygame 开发一个“文本框”类作为一个小型个人项目,但我遇到了一个让我非常困惑的问题。我正在尝试扩展找到here 的pygame 文本输入类,将其包装在支持多行的文本框类中,并希望支持滚动功能。
我的问题是在文本行之间上下移动闪光灯时出现的。基本上,一旦按下“向上”箭头,闪光灯就会一直移动到顶部,然后它就会停止响应向下移动。
这是我如何为 pygame_textbox 类提供事件的代码:
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来自上面的代码):
if event.type == pl.KEYDOWN:
if self.is_active:
print("reading in text box: {}".format(event))
if event.key == pl.K_UP and self.cursor_line > 0:
self.cursor_line -= 1
print("cursor going UP to {}".format(self.cursor_line))
if event.key == pl.K_DOWN and self.cursor_line < len(self.text_input)-1:
self.cursor_line += 1
print("cursor going DOWN to {}".format(self.cursor_line))
if event.key == pl.K_RETURN:
self.text_input.insert(self.cursor_line+1, pygame_textinput.TextInput())
self.cursor_line += 1
for line in self.text_input:
print(line.input_string)
尝试调试它似乎表明pygame.event.get() 队列正在接收比预期更多的KEYDOWN 事件;一按按钮会发送多个(有时是正在进行的)事件。我是 pygame 的新手,但我很确定 KEYDOWN 事件不应该发生这种情况,对吧?每次按下一个键时应该只触发一个事件。我在这里做错了什么?这是 pygame 本身的错误吗?
感谢您提供的任何帮助。我对此很陌生,我希望我正确地格式化了这个问题。
【问题讨论】:
-
文本框类是如何循环事件的?会不会多次处理同一个事件?