pyQt-GUI检测键盘操作

使用pyQt写GUI后,如果有键盘快捷键可以改善使用体验,提高效率某些方面的效率。
参考:
1.使用pyqt5实现键盘(含组合键)鼠标事件响应
2.Python matplotlib绘图,使用鼠标滚轮放大/缩小图像
3.【Python】【matplotlib】键鼠响应事件

键盘检测

主窗口继承自PyQt5.QtWidgets或PyQt5.QtWidgets.QMainWindow,在窗口class中重写函数keyPressEvent(self, event)

    def keyPressEvent(self, event):
        """
        重写了键盘检测事件函数。
        :param event:
        :return:
        """
        print(f'检测按键{event.key()}按下!')
        if event.key() == QtCore.Qt.Key_Down:
            pass
            # your code
        elif event.key() == QtCore.Qt.Key_Up:
            pass
            # your code 
        elif event.key() == QtCore.Qt.Key_A:
            pass
            # your code 

如果需要改变主窗口的鼠标滚轮事件就重写函数wheelEvent(self, event)

    def wheelEvent(self, event):
        """
        鼠标滚轮操作
        :param event: 
        :return:
        """
        # 向后时是-120,向前时是+120
        angle = event.angleDelta().y()
        try:
            if angle < 0:
            	pass
            	# your code 
            else:
            	pass
            	# your code 
        except Exception as e:
            print(e, 'error from wheelEvent()')
鼠标滚轮放大缩小绘图

在使用matlab plot时候可以通过鼠标选择绘图的大小,重置xlim和ylim,使用matplotlib时候上方会有菜单实现,但是绘制在GUI上就没有工具栏了,需要重写对应事件完成这个功能。参考2中使用

fig = plt.figure()
fig.canvas.mpl_connect('scroll_event', call_back)

绑定了scroll_event的回调函数call_back()。但是在一个figure中有多个canvas时候就需要把canvas这个参数也传递进去。使用labmda表达式1

self.mycanv.mpl_connect('scroll_event', lambda event: self.xylimScale(event, self.mycanv))

而回调函数定义为:

    def xylimScale(self, event, mycanvas):
        axtemp = event.inaxes
        x_min, x_max = axtemp.get_xlim()
        # print(event.x)
        print(event)
        fanwei = (x_max - x_min) / 10
        if event.button == 'up':
            axtemp.set(xlim=(x_min + fanwei, x_max - fanwei))
            print('up')
        elif event.button == 'down':
            axtemp.set(xlim=(x_min - fanwei, x_max + fanwei))
            print('down')
        mycanvas.draw_idle()  # 绘图动作实时反映在图像上

这样实现了鼠标滚轮放大/缩小绘图,但是缩放时候的中心点是x轴中点,要实现鼠标位置点为中心点的缩放还要捕捉鼠标位置坐变换。


  1. matplotlib - 在 fig.canvas.mpl_connect('key_press_event', on_key) 中,如何將參數傳遞給 on_key?, http://hant.ask.helplib.com/python/post_5278040 ↩︎

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值