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

时间:2022-02-26 01:30:09

本文实例讲述了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程序设计有所帮助。