pygame 界面输入之组合键(同时按两个键)解决方法

输入    !@#$%^&*()_+   这些键:
 

首先,网上的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")

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值