目的: 在执行程序的时候,可以通过按下键盘的上
下
左
右
来控制,当然用pygame也可以实现,我选择用pynput试试效果
用到的是 pynput.keyboard 中的 Key,Listener
- Key 用来判断是哪个键
- Listener 是监听当前按键的情况
需要自己定义 on_press(key)
和 on_release(key)
两个函数
像是信号与槽的机制
on_press(key)
定义获取按键后执行的操作on_release(key)
定义松开后执行的操作
还有很多可以参考 https://pypi.org/project/pynput/
因为我只需要获取一次按键,所以都不需要用release直接return False ,停止监听
from pynput.keyboard import Key,Listener
from direction import Direction
class Control():
def __init__(self):
self.dir_ = None # dir一定要用成员变量,不然没办法在on_press中修改
def getdir(self):
self.dir_ = None # 如果是不是上下左右则返回None
def on_press(key):
if key == Key.up:self.dir_ = Direction.UP
elif key == Key.down:self.dir_ = Direction.DOWN
elif key == Key.left:self.dir_ = Direction.LEFT
elif key == Key.right:self.dir_ = Direction.RIGHT
return False
listener = Listener(on_press=on_press) # 创建监听器
listener.start() # 开始监听,每次获取一个键
listener.join() # 加入线程
listener.stop() # 结束监听,没有这句也行,直接随函数终止
return self.dir_
Direction 只是我用到的一个枚举类,不重要
import enum
class Direction(enum.Enum):
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4
测试效果
if __name__ == '__main__':
c = Control()
i = 0
while True:
i+=1
print(i,c.getdir())
结果: