当前位置 博文首页 > Python可跨平台实现获取按键的方法

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

    作者:Sephiroth 时间:2021-07-25 10:46

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

    jsjbwy
    下一篇:没有了