35- 输入和显示-键位序列编辑组件keySequenceEdit

键位序列编辑组件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例子

image-20230319024039049

# -*- 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的快捷键章节

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值