python 在控制台中获取键盘按键,例如上下左右

目的: 在执行程序的时候,可以通过按下键盘的 来控制,当然用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())

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值