键位序列编辑组件keySequenceEdit
Qt 中专门为快捷键设定了 QKeySequence 类,它封装了快捷键使用的按键序列。本节主要介绍3种快捷键方式:
- 第1种是基于 QAction 的快捷键,这是设计菜单栏和工具栏常用的方式:
- 第2种是基于 QShortcut,可以对快捷键直接绑定相关的槽函数;
- 第3种是可视化的快捷键绑定,Qt中提供了可视化快捷键绑定的类QKeySequenceEdit,用户可以设置自己的快捷键。
这3种方式绑定快捷键都要使用QKeySequence,从而为不同的场景绑定快捷键提供便利。这3种方式之间没有相关性。
Qt 中专门为快捷键设定了 QKeySequence 类,它封装了快捷键使用的按键序列。本节主要介绍3种快捷键方式:
- 第1种是基于 QAction 的快捷键,这是设计菜单栏和工具栏常用的方式:
- 第2种是基于 QShortcut,可以对快捷键直接绑定相关的槽函数;
- 第3种是可视化的快捷键绑定,Qt中提供了可视化快捷键绑定的类QKeySequenceEdit,用户可以设置自己的快捷键。
这3种方式绑定快捷键都要使用QKeySequence,从而为不同的场景绑定快捷键提供便利。这3种方式之间没有相关性。
控件允许允许用户选择QKeySequence,它通常用作快捷方式。当小部件接收到焦点时开始录制,并在用户释放最后一个键后一秒结束录制。
keySequenceEdit直接继承自QtWidgets
from PySide6.QtWidgets import QKeySequenceEdit
from PySide6.QtGui import QShortcut,QKeySequence
QKeySequenceEdit(keySequence: Union[PySide6.QtGui.QKeySequence,PySide6.QtCore.QKeyCombination,PySide6.QtGui.QKeySequence.StandardKey,str,int],parent: Union[PySide6.QtWidgets.QWidget,NoneType] = None)-> None
QKeySequenceEdit(parent: Union[PySide6.QtWidgets.QWidget,NoneType] = None)-> None
QKeySequence(self)-> None
QKeySequence(k1: int,k2: int=0,k3: int=0,k4: int=0)-> None
QKeySequence(k1: Union[PySide6.QtCore.QKeyCombination,PySide6.QtCore.Qt.KeyboardModifier,PySide6.QtCore.Qt.Key],k2: Union[PySide6.QtCore.QKeyCombination,PySide6.QtCore.Qt.KeyboardModifier,PySide6.QtCore.Qt.Key]=Instance(QKeyCombination.fromCombined(0)),k3: Union[PySide6.QtCore.QKeyCombination,PySide6.QtCore.Qt.KeyboardModifier,PySide6.QtCore.Qt.Key]=Instance(QKeyCombination.fromCombined(0)),k4: Union[PySide6.QtCore.QKeyCombination,PySide6.QtCore.Qt.KeyboardModifier,PySide6.QtCore.Qt.Key]=Instance(QKeyCombination.fromCombined(0)))-> None
QKeySequence(key: PySide6.QtGui.QKeySequence.StandardKey)-> None
QKeySequence(key: str,format: PySide6.QtGui.QKeySequence.SequenceFormat=Instance(PySide6.QtGui.QKeySequence.SequenceFormat.NativeText))-> None
QKeySequence(ks: Union[PySide6.QtGui.QKeySequence,PySide6.QtCore.QKeyCombination,PySide6.QtGui.QKeySequence.StandardKey,str,int])-> None
QShortcut(arg__1: PySide6.QtGui.QKeySequence.StandardKey,arg__2: PySide6.QtCore.QObject,arg__3: Callable,arg__4: PySide6.QtCore.Qt.ShortcutContext = Instance(Qt.WindowShortcut))-> None
QShortcut(arg__1: Union[PySide6.QtGui.QKeySequence,PySide6.QtCore.QKeyCombination,PySide6.QtGui.QKeySequence.StandardKey,str,int],arg__2: PySide6.QtCore.QObject,arg__3: Callable,arg__4: PySide6.QtCore.Qt.ShortcutContext = Instance(Qt.WindowShortcut))-> None
QShortcut(key: PySide6.QtGui.QKeySequence.StandardKey,parent: PySide6.QtCore.QObject,member: Union[bytes,NoneType] = None,ambiguousMember: Union[bytes,NoneType] = None,context: PySide6.QtCore.Qt.ShortcutContext = Instance(Qt.WindowShortcut))-> None
QShortcut(key: Union[PySide6.QtGui.QKeySequence,PySide6.QtCore.QKeyCombination,PySide6.QtGui.QKeySequence.StandardKey,str,int],parent: PySide6.QtCore.QObject,member: Union[bytes,NoneType] = None,ambiguousMember: Union[bytes,NoneType] = None,context: PySide6.QtCore.Qt.ShortcutContext = Instance(Qt.WindowShortcut))-> None
QShortcut(parent: PySide6.QtCore.QObject)-> None
键位序列编辑keySequenceEdit方法
方法 | 返回值 | 说明 |
---|---|---|
setClearButtonEnabled(enable:bool) | None | 设置键序列编辑在不为空时是否显示清除按钮。 如果启用,键序列编辑在包含某些文本时会显示尾随清除按钮,否则行编辑不会显示清除按钮(默认)。 |
isClearButtonEnabled() | bool | 获取键序列编辑在不为空时是否显示清除按钮。 如果启用,键序列编辑在包含某些文本时会显示尾随清除按钮,否则行编辑不会显示清除按钮(默认)。 |
[slots]clear() | None | 清除当前键序列。 |
[slots]setKeySequence(keySequence:PySide6.QtGui.QKeySequence) | None | 设置当前选定键序列。 快捷方式可以由用户或通过setter函数进行更改。 |
keySequence() | PySide6.QtGui.QKeySequence | 返回当前选定的键序列。。 快捷方式可以由用户或通过setter函数进行更改。 |
键位序列编辑keySequenceEdit信号
信号 | 说明 |
---|---|
editingFinished() | 当用户完成输入快捷方式时发出该信号。 |
keySequenceChanged(keySequence:PySide6.QtGui.QKeySequence) | 快捷方式改变时发出该信号。 |
键位序列编辑keySequenceEdit例子
# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/14 23:54
# File_name: 03-QKeySequenceEdit的用法.py
"""
QKeySequenceEdit的用法,QKeySequence用法请见qt_QShortcut文件。
"""
import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
class KeySequenceEdit(QMainWindow):
def __init__(self,parent=None):
super(KeySequenceEdit,self).__init__(parent)
# 基本框架
label1 = QLabel('菜单save快捷键绑定:')
self.keyEdit1 = QKeySequenceEdit(self)
label2 = QLabel('菜单copy快捷键绑定:')
self.keyEdit2 = QKeySequenceEdit(self)
layout1 = QHBoxLayout()
layout1.addWidget(label1)
layout1.addWidget(self.keyEdit1)
layout2 = QHBoxLayout()
layout2.addWidget(label2)
layout2.addWidget(self.keyEdit2)
self.label_show = QLabel('显示按键信息')
self.text_show = QTextBrowser()
self.text_show.setMaximumHeight(60)
# 信号与槽绑定
# self.keyEdit1.editingFinished.connect(lambda :print('输入完毕1'))
# self.keyEdit2.editingFinished.connect(lambda :print('输入完毕2'))
self.keyEdit1.keySequenceChanged.connect(lambda key: self.save.setShortcut(key))
self.keyEdit2.keySequenceChanged.connect(lambda key: self.copy.setShortcut(key))
self.keyEdit1.keySequenceChanged.connect(self.show_key)
self.keyEdit2.keySequenceChanged.connect(self.show_key)
# 菜单栏
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("New")
self.save = QAction("Save",self)
file.addAction(self.save)
self.copy = QAction('Copy',self)
file.addAction(self.copy)
file.triggered[QAction].connect(lambda q: self.statusBar().showMessage('触发菜单:%s;快捷键:%s'%(q.text(),q.shortcuts()),3000))
# 布局管理
layout = QVBoxLayout()
layout.addLayout(layout1)
layout.addLayout(layout2)
layout.addWidget(self.label_show)
layout.addWidget(self.text_show)
widget = QWidget(self)
widget.setLayout(layout)
self.setCentralWidget(widget)
self.resize(300,200)
def show_key(self,key: QKeySequence):
self.statusBar().showMessage('更新快捷键'+ str(key),2000)
key1 = self.keyEdit1.keySequence()
key2 = self.keyEdit2.keySequence()
_str = f'菜单栏快捷键更新成功;\nsave绑定:{key1}\ncopy绑定:{key2}'
# self.label_show.setText(_str)
self.text_show.setText(_str)
if __name__ =='__main__':
app = QApplication(sys.argv)
demo = KeySequenceEdit()
demo.show()
sys.exit(app.exec())
例2
import sys
from PySide6.QtGui import QKeySequence
from PySide6.QtWidgets import QWidget,QKeySequenceEdit,QApplication
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QKeySequenceEdit-快捷键设置 - PyQt5中文网")
self.resize(600,500)
self.func_list()
def func_list(self):
self.func()
def func(self):
# 设置快捷键
kse=QKeySequenceEdit(self)
ks=QKeySequence('Ctrl+A')# 直接使用字符串设置
# ks=QKeySequence(QKeySequence.Copy)# 使用枚举值设置
# ks=QKeySequence(Qt.CTRL + Qt.Key_C,Qt.CTRL + Qt.Key_A)# 使用枚举值设置
kse.setKeySequence(ks)
# 获取快捷键
# print(kse.keySequence())# 获取快捷键对象
# print(kse.keySequence().toString())# 获取快捷键
# 清除
# kse.clear()
# 信号
# editingFinished()# 结束编辑时
# keySequenceChanged()# 键位序列发生改变时
kse.editingFinished.connect(lambda: print(kse.keySequence().toString()))# 结束之后一秒
# kse.keySequenceChanged.connect(lambda val: print('AAAA',val.toString()))
if __name__=='__main__':
app=QApplication(sys.argv)
window=Window()
window.show()
sys.exit(app.exec())
快捷键QShortcut
参考窗口/窗口控件、对话框以及相关功能类 - 快捷键设置和键位序列 - 基于QShortcut的快捷键章节