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中字典映射类型的学习教程
Aug 20 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
使用python 3实现发送邮件功能
Jun 15 Python
python根据list重命名文件夹里的所有文件实例
Oct 25 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
python pandas库的安装和创建
Jan 10 Python
python3射线法判断点是否在多边形内
Jun 28 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
pytorch快速搭建神经网络_Sequential操作
Jun 17 Python
pycharm进入时每次都是insert模式的解决方式
Feb 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的计数器程序
2006/10/09 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
2015/01/19 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
npm qs模块使用详解
2020/02/07 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
python用列表生成式写嵌套循环的方法
2018/11/08 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
对python中Json与object转化的方法详解
2018/12/31 Python
Django多数据库的实现过程详解
2019/08/01 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
python飞机大战游戏实例讲解
2020/12/04 Python
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
大学新生军训方案
2014/05/03 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
《我爱祖国》演讲稿1000字
2014/09/26 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
python中print格式化输出的问题
2021/04/16 Python
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
pytorch 如何使用float64训练
2021/05/24 Python