PyQT5中键盘事件响应的重载实现

编程语言及工具

99人已加入

描述

键盘事件

QT本身自带的输入事件,开发者常用主要是鼠标跟键盘事件 键盘键盘 前面文章中已经介绍了鼠标事件,而且通过鼠标事件响应处理实现了不同几何图形的绘制。PyQT5中键盘事件响应主要通过重载下面两个方法实现  

 

keyPressEvent() 
keyReleaseEvent()
  如果在多个界面之间切换一定要调用一下:  
grabKeyboard()
releaseKeyboard()
  第一行放在构造函数中,第二行放在切换界面之前,这点对EditLine等文本输入框特别重要,一定要有!不然界面切换之后你就会发现无法响应键盘输入了,因为默认还是上个界面。

代码演示部分

这里讲介绍键盘响应事件,我们分别给之前的图像浏览器加上键盘快捷键响应支持,实现通过键盘上箭头按键完成到上一张或者下一张图像切换浏览。运行结果如下:

键盘

  代码实现如下:

 1def keyPressEvent(self, event):
 2    print("key press response", event.key())
 3    if event.key() == QtCore.Qt.Key_PageUp:
 4        self.on_back_image_view()
 5
 6    if event.key() == QtCore.Qt.Key_PageDown:
 7        self.on_forward_image_view()
 8
 9def keyReleaseEvent(self, event):
10    print("key release response", event.key())
11    if event.key() == QtCore.Qt.Key_Left:
12        self.on_back_image_view()
13
14    if event.key() == QtCore.Qt.Key_Right:
15        self.on_forward_image_view()
  上面的代码运行时你会发现,键盘上上下左右四个按键还有部分功能按键都无法正确响应,有的压根就不调用两个重载的键盘事件方法,这个是PyQT5中的大坑,一定要注意,必须把重载的方法声明为下面的格式与实现:
 1def keyPressEvent(self, a0: QtGui.QKeyEvent):
 2    print("key press response", a0.key())
 3    if a0.key() == QtCore.Qt.Key_PageUp:
 4        self.on_back_image_view()
 5
 6    if a0.key() == QtCore.Qt.Key_PageDown:
 7        self.on_forward_image_view()
 8
 9def keyReleaseEvent(self, a0: QtGui.QKeyEvent):
10    print("key release response", a0.key())
11    if a0.key() == QtCore.Qt.Key_Left:
12        self.on_back_image_view()
13
14    if a0.key() == QtCore.Qt.Key_Right:
15        self.on_forward_image_view()
  这时候你会发现一切正常响应了。运行结果如下图:

键盘

键盘

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分