输入 !@#$%^&*()_+ 这些键:
首先,网上的key.mods的运用只能解决一次组合键的情况,但是要实现输入算数表达式肯定不止一次啊。于是解决思路如下:
1. 把event都打印出来:
import pygame
import pygame.locals
import math
pygame.init()
screen = pygame.display.set_mode((300,200))
running = True
while running:
event=pygame.event.wait()
if event.type == pygame.KEYDOWN:
print(str(event)+'\n')
pygame.quit()
这是我按下LSHIFT+大键盘9,松开之后按下RSHIFT+大键盘9的事件:
第二次明明是组合键,为啥是mod==0呢,恳请各位大佬解答!
但是这些按键都是有唯一标识的‘scancode’:
键扫描码,可以理解为一堆高低电平(0,1)和ASCII码没什么关系。
具体解释:
计算机键盘通常采用行列扫描法来确定按下键所在的行列位置。所谓行列扫描法是指,把键盘按键排列成n行×m列的n*m行列点阵,把行、列线分别连接到两个 并行接口双向传送的连接线上,点阵上的键一旦被按动,该键所在的行列点阵信号就被认为已接通。按键所排列成的矩阵,需要用硬件或软件的方法轮转顺序地对其 行、列分别进行扫描,以查询和确认是否有键按动。如有键按动,键盘就会向主机发送被按键所在的行列点阵的位置编码,称为键扫描码。
然后就可以定义一个pre_pressed的自变量存储上一个按键,然后自定义组合按键的行为事件。
if event.key==pygame.K_9:
if pre_key==42 or pre_key==54:
current_string.append("(")
else:
current_string.append("9")