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


Posted in Python onMarch 05, 2015

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

Python 相关文章推荐
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
pandas中Timestamp类用法详解
Dec 11 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
python文本数据处理学习笔记详解
Jun 17 Python
Python中的类与类型示例详解
Jul 10 Python
django中使用POST方法获取POST数据
Aug 20 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
Django实现文件上传和下载功能
Oct 06 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
Python读取mp3中ID3信息的方法
Mar 05 #Python
Python查找相似单词的方法
Mar 05 #Python
Python兔子毒药问题实例分析
Mar 05 #Python
Python获取服务器信息的最简单实现方法
Mar 05 #Python
Python实现简单的可逆加密程序实例
Mar 05 #Python
Python装饰器的函数式编程详解
Feb 27 #Python
python分析nignx访问日志脚本分享
Feb 26 #Python
You might like
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
详解Vue方法与事件
2017/03/09 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
js实现批量删除功能
2020/08/27 Javascript
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python常见排序算法基础教程
2017/04/13 Python
PyQt5每天必学之组合框
2018/04/20 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
Python pip使用超时问题解决方案
2020/08/03 Python
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
销售演讲稿范文
2014/01/08 职场文书
安全大检查反思材料
2014/01/31 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
人大调研汇报材料
2014/08/14 职场文书
普通党员整改措施
2014/10/24 职场文书
小班上学期个人总结
2015/02/12 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs