Python可跨平台实现获取按键的方法

410次阅读  |  发布于5年以前

本文实例讲述了Python可跨平台实现获取按键的方法。分享给大家供大家参考。具体如下:

复制代码 代码如下:

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

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8