pygame密钥不使用大写字母

时间:2018-10-31 08:38:07

标签: python pygame

我正在尝试向用户输入内容,然后在pygame窗口上显示输入内容,效果很好,问题是当我按左移键或大写字母时,我的列表单词没有大写字母。

words = []
class Input:

    def keys(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    if event.key == pygame.K_LSHIFT:
                        words.append("A")
                    else:
                        words.append("a")

    def TextBox(self, surface, BoxColor, TextColor, Text, x,y,w,h):
        font = pygame.font.SysFont("Arial", 20)
        pygame.draw.rect(surface, BoxColor, (x,y,w,h))
        word = "".join(words)
        text(surface, word, TextColor, font, x,y,w,h)
        self.keys(self)

2 个答案:

答案 0 :(得分:1)

每次按键都会生成一个事件,因此按shift和a会生成两个不同的事件。

仔细查看您的代码:

if event.key == pygame.K_a:
    if event.key == pygame.K_LSHIFT:

event.key不能同时是pygame.K_a pygame.K_LSHIFT


要解决您的问题,请查看pygame.key.get_mods

  

pygame.key.get_mods()
      确定要保留哪些修饰键
      get_mods() -> int

     

返回一个整数,该整数表示所持有的所有修饰键的位掩码。使用按位运算符可以测试是否   按下特定的移位键,大写锁定按钮的状态以及   更多。

所以您的代码应该看起来像这样(您会明白的。):

        if event.type == pygame.KEYDOWN:
            mods = pygame.key.get_mods()
            if event.key == pygame.K_a:
                if mods & pygame.KMOD_LSHIFT or mods & pygame.KMOD_CAPS:
                    words.append("A")
                else:
                    words.append("a")

但是我想您不想为每个可能的键创建一个if块,所以您可能想使用pygame.key.name()pygame.KEYDOWN.unicode直接从事件中读取字母。

看看Is there any easy way to find the letter/number of ANY alphanumeric pressed?

答案 1 :(得分:1)

您还可以仅附加db.getCollection('tests').aggregate([ { $match: { $or : [ { "deleted": false, "type": "A", "date": ISODate("2018-11-01T00:00:00.000Z") }, { "deleted": false, type: { $ne: "A" }} ]} } ]) 属性。

event.unicode