Qt和PyQt中的组合键输入捕获处理

一、引言

在《PyQt(Python+Qt)实现的GUI图形界面应用程序的事件捕获方法大全及对比分析》介绍了PyQy中事件捕获方法,在《PyQt学习随笔:PyQt中捕获键盘事件后获取具体按键值的方法》介绍了获取按键值的方法。今天有网友咨询在PyQt中组合键输入怎么识别,例如:Ctrl+A 怎么显示的输入键值是A呢?老猿原来没测试过组合键,为此特地做了下测试,发现Qt和PyQt中的组合键输入确实需要特殊处理。

二、PyQt和Qt的组合键输入事件触发

2.1、组合键输入的事件触发

经老猿验证测试,在PyQt和Qt中输入组合键时:Ctrl+A时,会触发两次键盘事件:

  1. 第一次键盘事件得到的键值为:Qt::Key_Control;
  2. 第二次键盘事件得到的键值为:A(0x41)
    实际上此时Ctrl键还是没有释放,怎么获取这种组合状态呢?此时需要用到QKeyEvent.modifiers方法,来获取是否使用了辅助键(即修饰键),该方法返回的是一系列枚举值,具体取值在Qt文档中说明如下:
    在这里插入图片描述
    以上枚举值可以组合使用,如同时按下:Ctrl+Alt 两个键,则需要判断上述方法返回值是否等于Qt.ControlModifier|Qt.AltModifier

所以对于这种不可见键+可见字符键的组合输入,除了判断按键的返回Key外,还需要判断keyevent.modifiers方法的返回值。

三、实例代码

下面的代码判断是否含有组合输入Ctrl+其他可见字符键:

def keyPressEvent(self, keyevent):
        modifiers = keyevent.modifiers()
        print(f"In keyPressEvent:键盘按键 {
      
      'Ctrl+' if modifiers == (Qt.ControlModifier) else ' '},{
      
      keyevent.text()},0X{
      
      keyevent.key():X} 被按下")

下面的代码判断是否含有组合输入Ctrl+Alt+A被按下:

def keyPressEvent(self, keyevent):
        modifiers = keyevent.modifiers()
        if modifiers == (Qt.ControlModifier|Qt.AltModifier ) and keyevent.text()=='A':
            print("Ctrl+Alt+A pressed!")

四、其他

4.1、含有多个可见字符的组合键的识别

上面介绍的方法可以识别使用Ctrl、Alt、Shift修饰键的情况,但如果要是在组合键中包含多个可见字符,却不能用这种方法,此时只能将键盘按键按下时的键值追加到缓冲区保存,在按键释放时再将对应字符删除,然后再判断缓冲区中是否包含多个的可见字符值。

4.2、对于字母大小写的识别

在Qt和PyQt中,对于字母的大小写,QKeyEvent.key()返回值是一样的,但keyevent.text()返回值是区分了大小写的,所以处理时要注意。

五、小结

本文介绍了在Qt和PyQt中怎么识别组合键的方法,需要注意对于修饰键+组合键的方法,需要QKeyEvent.modifiers,而对于多个可见字符的组合键,需要对键盘按键按下和释放都进行处理。

更多关于PyQt的介绍请参考付费专栏《使用PyQt开发图形界面Python应用》或免费专栏《PyQt入门知识》。

写博不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

如对文章内容存在疑问,可在博客评论区留言,或通过扫描博客左边的二维码关注:老猿Python 微信公号发消息咨询。

关于老猿的付费专栏

  1. 付费专栏《 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 使用PyQt开发图形界面Python应用专栏目录》;

  2. 付费专栏《 moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《moviepy音视频开发专栏文章目录》;

  3. 付费专栏《 OpenCV-Python初学者疑难问题集》为《 OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《 OpenCV-Python初学者疑难问题集专栏目录

  4. 付费专栏《Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《 OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录

猜你喜欢

转载自blog.csdn.net/LaoYuanPython/article/details/119520686