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