pyqt5-快捷键设置

1、介绍

pyqt5中有三种方式可以设置快捷键,所谓快捷键,本质上就是以单个或多个组合键盘按键的方式,调用某方法。

2、两种方法

2.1 setShortcut方法

"""
直接为组件设置快捷键,不区分事件类型,会调用该组件各种事件绑定的所有方法
"""
self.ui.pushButton_2.setShortcut('A')
self.ui.pushButton_2.setShortcut('shift+p')
  • 必须有组件作为触发媒介,即在快捷键使用之前需要有能够调用目标方法的事件
  • setShortcut方法的机制是,当快捷键按下,对调用该方法的组件所绑定的所有方法进行调用。反之,无法精确为组件的某一事件设置快捷键,即无法直接的快捷键调用某一方法。
  • 一般应用在QPushButton这种功能单一的组件,使用时只对某一事件绑定了方法

2.2 重写keyPressEvent方法

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QKeyEvent

    self.window.lineEdit.keyPressEvent = self.f
    def f(self, event: QKeyEvent):
        if event.key() == Qt.Key_Enter:
            print('abc')
  • Qt.Key_Enter实际是一个数值int类型
  • Qt.Key_Left表示键盘上的方向键

3、QShortcut类

该类创建对象,可以为组件创建快捷键。

3.1 初始化和使用

QShortcut(parent: QWidget)
QShortcut(key: Union[QKeySequence, QKeySequence.StandardKey, str, int], parent: QWidget, member: PYQT_SLOT = 0, ambiguousMember: PYQT_SLOT = 0, context: Qt.ShortcutContext = Qt.WindowShortcut)

使用:

"""
以下声明可以为指定组件对象,调用指定方法
需要注意,基于该快捷键激活,此时sender方法获取到的是QShortcut对象
"""
QShortcut(QKeySequence("ctrl+f"), self.ui.pushButton, self.p)
# 或者
shortcut = QShortcut(QKeySequence("ctrl+f"), self.ui.pushButton)
shortcut.activated.connect(self.p)

def p(self, x=None):
    if not self.window.lineEdit.hasFocus():
        print('未获得焦点')
        return
    ....
  • 创建对象声明,快捷键即生效,不需要再绑定或者传参
  • 与setShortcut方法相比,可以直接将快捷键按下绑定到某一方法。直接创建时声明或者调用创建对象的activated信号绑定方法
  • 设置组件参数,其所在窗口中,无需聚焦某一组件,按下快捷键都会调用绑定的方法
  • 如果想设置只有某个特定组件或者几个组件使用快捷键时有效,则可以在绑定的调用方法中通过焦点判断特定组件是否聚焦,决定是否继续执行

快速查找:

autoRepeat(self) -> bool
context(self) -> Qt.ShortcutContext
id(self) -> int
isEnabled(self) -> bool
key(self) -> QKeySequence
parentWidget(self) -> QWidget
setAutoRepeat(self, on: bool)
setContext(self, context: Qt.ShortcutContext)
setEnabled(self, enable: bool)
setKey(self, key: Union[QKeySequence, QKeySequence.StandardKey, str, int])
setWhatsThis(self, text: str)
whatsThis(self) -> str
---------------
event(self, e: QEvent) -> bool
---------------
activated(self) [signal]
activatedAmbiguously(self) [signal]

3.2 方法和事件

(1)是否可用

setEnabled(self, enable: bool)
isEnabled(self) -> bool
  • 设置快捷键是否可用、获取快捷键是否可用

(2)activated

activated(self) [signal] 
  •  设置的快捷键被按下时,会触发activated信号,进而调用该信号绑定的方法

4、快捷键

(1)在文本前使用&, 自动会设置快捷键为 Alt + 首字母

button = QPushButton("&sign_up", window)
# 会自动设置快捷键 Alt + S

(2)一般无所谓大小写,即Ctrl+F和ctrl+f等价。

(3)Enter字符串设置时,对应的只是数字键盘区域的enter键。而return表示字母键盘区域的enter.可以同时进行设置。

QShortcut(QKeySequence("return"), self.window.lineEdit, self.search)
QShortcut(QKeySequence("enter"), self.window.lineEdit,self.search)

(4)QShortcut设置快捷键,在一个窗口中对同一按键或按键组合,只能设置一次。否则的话,不会报错,但是也不会触发调用事件。

如果想对同一窗口中的不同组件,当其聚焦时按下快捷键,分别调用不同的方法。那么可以声明一个方法来处理,QShortcut绑定到该方法,判断按下快捷键时聚焦的对象,再进行分别处理。

QShortcut(QKeySequence("Enter"), self.window.lineEdit, self.which_focus)
QShortcut(QKeySequence("return"), self.window.lineEdit, self.which_focus)

def which_focus(self):
    if self.window.lineEdit.hasFocus():
        pass
    if self.window.lineEdit_2.hasFocus():
        pass

 

posted @ 2023-07-02 02:48  挖洞404  阅读(1227)  评论(0编辑  收藏  举报