python读取键盘事件_学习python-跨平台获取键盘事件

这是一个Python模块,用于从标准输入获取单个字符,不回显到屏幕。它包含针对Unix、Windows和Mac Carbon的实现。通过不同的导入方式,根据运行环境选择合适的输入方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class _Getch:

"""Gets a single character from standard input. Does not echo to the screen."""

def __init__(self):

try:

self.impl = _GetchWindows()

except ImportError:

try:

self.impl = _GetchMacCarbon()

except AttributeError:

self.impl = _GetchUnix()

def __call__(self): return self.impl()

class _GetchUnix:

def __init__(self):

import tty, sys, termios # import termios now or else you'll get the Unix version on the Mac

def __call__(self):

import sys, tty, termios

fd = sys.stdin.fileno()

old_settings = termios.tcgetattr(fd)

try:

tty.setraw(sys.stdin.fileno())

ch = sys.stdin.read(1)

finally:

termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)

return ch

class _GetchWindows:

def __init__(self):

import msvcrt

def __call__(self):

import msvcrt

return msvcrt.getch()

class _GetchMacCarbon:

"""

A function which returns the current ASCII key that is down;

if no ASCII key is down, the null string is returned. The

page http://www.mactech.com/macintosh-c/chap02-1.html was

very helpful in figuring out how to do this.

"""

def __init__(self):

import Carbon

Carbon.Evt #see if it has this (in Unix, it doesn't)

def __call__(self):

import Carbon

if Carbon.Evt.EventAvail(0x0008)[0]==0: # 0x0008 is the keyDownMask

return ''

else:

#

# The event contains the following info:

# (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]

#

# The message (msg) contains the ASCII char which is

# extracted with the 0x000000FF charCodeMask; this

# number is converted to an ASCII character with chr() and

# returned

#

(what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]

return chr(msg & 0x000000FF)

if __name__ == '__main__': # a little test

print 'Press a key'

inkey = _Getch()

import sys

for i in xrange(sys.maxint):

k=inkey()

if k<>'':break

print 'you pressed ',k

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值