LeoWang2021 发表于 2023-2-11 18:12

PyQt重载按键事件 保留原按钮功能

本身实现技术并不难,但是几个搜索引擎并不容易找到,故在此记录一下,方便大家实现方法参考:https://blog.csdn.net/mahuatengmmp/article/details/118758281同时也推荐一下这个文章的其他部分,节点编辑器实现的效果还是不错的
下面是正文


在PyQt5中直接重载某一控件的keyPressEvent函数,会导致控件原来功能的快捷键失效class specialEdit(QLineEdit):
    def __init__(self, parent):
      super(specialEdit, self).__init__(parent)

    def keyPressEvent(self, key_event:QtGui.QKeyEvent):
      '''
      重写键盘的全选,复制粘贴
      :param key_event:
      :return:
      '''
      if key_event == QtGui.QKeySequence.SelectAll:#禁止全选
            print('不要全选哦~')
            return
      elif key_event == QtGui.QKeySequence.Paste:#禁止粘贴
            print('不要粘贴哦~')
            return
      elif key_event == QtGui.QKeySequence.Copy:#禁止复制
            print('不要复制哦~')
            return
但这样实现的话会导致输入框原本的键盘功能(如左右键调节光标,退格键删除字符)失效此问题可以通过调用父类方法解决class specialEdit(QLineEdit):
    def __init__(self, parent):
      super(specialEdit, self).__init__(parent)

    def keyPressEvent(self, key_event:QtGui.QKeyEvent):
      '''
      重写键盘的全选,复制粘贴
      :param key_event:
      :return:
      '''
      if key_event == QtGui.QKeySequence.SelectAll:#禁止全选
            print('不要全选哦~')
            return
      elif key_event == QtGui.QKeySequence.Paste:#禁止粘贴
            print('不要粘贴哦~')
            return
      elif key_event == QtGui.QKeySequence.Copy:#禁止复制
            print('不要复制哦~')
            return
      else:
            super().keyPressEvent(key_event)这样问题就解决了
页: [1]
查看完整版本: PyQt重载按键事件 保留原按钮功能