天天看點

實戰PyQt5: 029-快捷鍵編輯控件QKeySequenceEditQKeySequenceEdit簡介測試QKeySequenceEdit本文知識點

QKeySequenceEdit簡介

QKeySequenceEdit是一個用于輸入快捷鍵序列的控件,快捷鍵輸入完成後發射keySequenceChanged( QKeySequence)和editingFinished()信号,前一個信号的傳入參數就是新的快捷鍵序列,後一個信号不直接提供快捷鍵序列,但可以通過控件的keySequence來擷取。

QKeySequenceEdit常用方法:

  • setKeySequence(): 設定快捷鍵序列
  • keySequence(): 獲得快捷鍵序列
  • clear(): 清除快捷鍵序列

QKeySequenceEdit常用信号:

  • keySequenceChanged: 快捷鍵序列發生改變,發射信号,并傳入快捷鍵序列
  • editingFinished: 快捷鍵編輯結束後發射該信号

QKeySequenceEdit類繼承關系:

實戰PyQt5: 029-快捷鍵編輯控件QKeySequenceEditQKeySequenceEdit簡介測試QKeySequenceEdit本文知識點

測試QKeySequenceEdit

qkeysequenceedit.py示範快捷鍵編輯和設定的方法, 在程式中,我們建立了兩個按鈕""打開檔案"和"另存為", 然後通過QKeySequenceEdit為按鈕"打開檔案"編輯快捷"Ctrl+O"并點選"設定快捷鍵"設定,之後,直接按"Ctrl+O"即可直接打開檔案對話框,類似為按鈕"另存為"設定快捷鍵"Ctrl+A",完整代碼如下:

Ui_editshortcut.py(由uic根據editshortcut.ui生成):

from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_EditShortcut(object):
    def setupUi(self, EditShortcut):
        EditShortcut.setObjectName("EditShortcut")
        EditShortcut.resize(400, 300)
        self.verticalLayout = QtWidgets.QVBoxLayout(EditShortcut)
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.btnOpenFile = QtWidgets.QToolButton(EditShortcut)
        self.btnOpenFile.setMinimumSize(QtCore.QSize(64, 0))
        self.btnOpenFile.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
        self.btnOpenFile.setObjectName("btnOpenFile")
        self.horizontalLayout.addWidget(self.btnOpenFile)
        self.btnSaveFileAs = QtWidgets.QToolButton(EditShortcut)
        self.btnSaveFileAs.setMinimumSize(QtCore.QSize(64, 0))
        self.btnSaveFileAs.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
        self.btnSaveFileAs.setObjectName("btnSaveFileAs")
        self.horizontalLayout.addWidget(self.btnSaveFileAs)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.verticalLayout.addLayout(self.horizontalLayout)
        spacerItem1 = QtWidgets.QSpacerItem(20, 80, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.verticalLayout.addItem(spacerItem1)
        self.formLayout = QtWidgets.QFormLayout()
        self.formLayout.setHorizontalSpacing(20)
        self.formLayout.setObjectName("formLayout")
        self.label = QtWidgets.QLabel(EditShortcut)
        self.label.setObjectName("label")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
        self.cmbBox = QtWidgets.QComboBox(EditShortcut)
        self.cmbBox.setObjectName("cmbBox")
        self.cmbBox.addItem("")
        self.cmbBox.addItem("")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cmbBox)
        self.label_2 = QtWidgets.QLabel(EditShortcut)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
        self.keySeqEdit = QtWidgets.QKeySequenceEdit(EditShortcut)
        self.keySeqEdit.setObjectName("keySeqEdit")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.keySeqEdit)
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.formLayout.setItem(2, QtWidgets.QFormLayout.LabelRole, spacerItem2)
        self.btnSet = QtWidgets.QPushButton(EditShortcut)
        self.btnSet.setObjectName("btnSet")
        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.btnSet)
        self.verticalLayout.addLayout(self.formLayout)
        spacerItem3 = QtWidgets.QSpacerItem(20, 79, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem3)
 
        self.retranslateUi(EditShortcut)
        QtCore.QMetaObject.connectSlotsByName(EditShortcut)
 
    def retranslateUi(self, EditShortcut):
        _translate = QtCore.QCoreApplication.translate
        EditShortcut.setWindowTitle(_translate("EditShortcut", "實戰PyQt5: QKeySequenceEdit Demo!"))
        self.btnOpenFile.setText(_translate("EditShortcut", "打開檔案"))
        self.btnSaveFileAs.setText(_translate("EditShortcut", "另存為"))
        self.label.setText(_translate("EditShortcut", "選擇修改項:"))
        self.cmbBox.setItemText(0, _translate("EditShortcut", "打開檔案"))
        self.cmbBox.setItemText(1, _translate("EditShortcut", "另存為"))
        self.label_2.setText(_translate("EditShortcut", "編輯快捷鍵:"))
        self.btnSet.setText(_translate("EditShortcut", "設定快捷鍵"))
           

qkeysequenceedit.py:

import sys
 
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import (QApplication, QWidget, QStyle, QFileDialog)
 
from Ui_editshortcut import Ui_EditShortcut
 
class DemoKeySequenceEdit(QWidget):
    def __init__(self, parent=None):
        super(DemoKeySequenceEdit, self).__init__(parent)       
        
        self.shortcutKey = QKeySequence()
        
        self.ui = Ui_EditShortcut()
        self.ui.setupUi(self)
        
        self.ui.btnOpenFile.setIcon(QApplication.style().standardIcon(QStyle.SP_DialogOpenButton))
        self.ui.btnOpenFile.clicked.connect(self.onFileOpen)
        self.ui.btnSaveFileAs.setIcon(QApplication.style().standardIcon(QStyle.SP_DialogSaveButton))
        self.ui.btnSaveFileAs.clicked.connect(self.onSaveFileAs)
        
        self.ui.keySeqEdit.keySequenceChanged[QKeySequence].connect(self.btnShortcutChanged)
        self.ui.btnSet.clicked.connect(self.OnShortcutSet)
                
    def onFileOpen(self):
        QFileDialog.getOpenFileName(self, '打開檔案', '', '文本檔案 (*.txt)')
    
    def onSaveFileAs(self):
        QFileDialog.getSaveFileName(self, '檔案另存為', '', '文本檔案 (*.txt)') 
        
    def btnShortcutChanged(self, ks):
        self.shortcutKey = ks  
    
    def OnShortcutSet(self):
        sel_idx = self.ui.cmbBox.currentIndex()
        if(sel_idx == 0):
            self.ui.btnOpenFile.setShortcut(self.shortcutKey) 
        else:
            self.ui.btnSaveFileAs.setShortcut(self.shortcutKey)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoKeySequenceEdit()
    window.show()
    sys.exit(app.exec())     
           

運作結果如下圖所示:

實戰PyQt5: 029-快捷鍵編輯控件QKeySequenceEditQKeySequenceEdit簡介測試QKeySequenceEdit本文知識點

測試QKeySequenceEdit

本文知識點

  • QKeySequenceEdit的基本功能;
  • QCombox目前選擇項擷取;
  • QToolButton添加系統内建圖示。

前一篇: 實戰PyQt5: 028-純文字編輯控件QPlainTextEdit