如何在 PyQT5 对话框中记录按下的组合键 window

How to record a pressed key combination in the PyQT5 dialog window

我从主 window 打开对话框,通过夹紧键,我用他们的名字填充行。问题是我不明白你需要在哪里循环检查所有键的状态。也许还有另一种方法可以按下按键?或者需要监听夹紧的地方,让对话框不挂,更新字符串。

MainWindow:
    def showBindings(self, param):
        from dialogs import KeyBindingsDialog
        self.dialog = KeyBindingsDialog()
        self.dialog.show()

Dialog:
class KeyBindingsDialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(KeyBindingsDialog, self).__init__(parent)
        self.ui = KeyBindings()
        self.ui.setupUi(self)

使用 QKeySequenceEdit:

from PyQt5 import QtCore, QtGui, QtWidgets

class KeySequenceEdit(QtWidgets.QKeySequenceEdit):
    def keyPressEvent(self, event):
        super(KeySequenceEdit, self).keyPressEvent(event)
        seq_string = self.keySequence().toString(QtGui.QKeySequence.NativeText)
        if seq_string:
            last_seq = seq_string.split(",")[-1].strip()
            le = self.findChild(QtWidgets.QLineEdit, "qt_keysequenceedit_lineedit")
            self.setKeySequence(QtGui.QKeySequence(last_seq))
            le.setText(last_seq)
            self.editingFinished.emit()


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        self._keysequenceedit = KeySequenceEdit(editingFinished=self.on_editingFinished)
        button = QtWidgets.QPushButton("clear", clicked=self._keysequenceedit.clear)
        hlay = QtWidgets.QHBoxLayout(self)
        hlay.addWidget(self._keysequenceedit)
        hlay.addWidget(button)

    @QtCore.pyqtSlot()
    def on_editingFinished(self):
        sequence = self._keysequenceedit.keySequence()
        seq_string = sequence.toString(QtGui.QKeySequence.NativeText)
        print("sequence: ", seq_string)

if __name__ == '__main__':
    import sys 
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())