我正在尝试向用户输入内容,然后在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)
答案 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