QKeySequenceEdit簡介
QKeySequenceEdit是一個用于輸入快捷鍵序列的控件,快捷鍵輸入完成後發射keySequenceChanged( QKeySequence)和editingFinished()信号,前一個信号的傳入參數就是新的快捷鍵序列,後一個信号不直接提供快捷鍵序列,但可以通過控件的keySequence來擷取。
QKeySequenceEdit常用方法:
- setKeySequence(): 設定快捷鍵序列
- keySequence(): 獲得快捷鍵序列
- clear(): 清除快捷鍵序列
QKeySequenceEdit常用信号:
- keySequenceChanged: 快捷鍵序列發生改變,發射信号,并傳入快捷鍵序列
- editingFinished: 快捷鍵編輯結束後發射該信号
QKeySequenceEdit類繼承關系:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yYwYTO1UmYlFDZygTOkRjN5IDMiFjNhRGO2UmNyIWNl9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
測試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())
運作結果如下圖所示:
測試QKeySequenceEdit
本文知識點
- QKeySequenceEdit的基本功能;
- QCombox目前選擇項擷取;
- QToolButton添加系統内建圖示。
前一篇: 實戰PyQt5: 028-純文字編輯控件QPlainTextEdit