Как правильно определить модификатор alt в linux с qt5 и PySide2? - PullRequest
0 голосов
/ 31 марта 2020

По какой-то причине я могу обнаружить модификатор alt только тогда, когда сначала нажимаю alt, а затем клавишу Shift. Если я сделаю наоборот (сначала нажмите клавишу Shift, а затем клавишу Alt), обнаруженные клавиши-модификаторы - это мета-клавиша и клавиша Shift.

Активируйте окно, попробуйте клавиши, модификаторы будут напечатаны на консоли. Моя ОС - CentOS 7.6, PySide2 2.0.0 ~ alpha0

Редактировать: я пытался на другой системе с Fedora 31 и PySide2 5.13.2, тот же результат.

import os
import sys
from PySide2 import QtCore, QtGui, QtWidgets

modifierKeyInverseMap = {v: k for k, v in QtCore.Qt.KeyboardModifier.values.items()}


class Dialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        layout = QtWidgets.QHBoxLayout()
        button = QtWidgets.QPushButton('Test')
        layout.addWidget(button)
        self.setLayout(layout)
        self.installEventFilter(self)

    def eventFilter(self, source, event):
        if event.type() == QtCore.QEvent.KeyPress:
            print('-'*50)
            modifiers = event.modifiers()
            for k in modifierKeyInverseMap:
                if k & modifiers:
                    print('-', modifierKeyInverseMap[k])

        return QtCore.QObject.eventFilter(self, source, event)


app = QtWidgets.QApplication(sys.argv)

d = Dialog()
d.show()
d.raise_()
d.move(500, 500)

sys.exit(app.exec_())

output

--------------------------------------------------
('-', 'KeyboardModifierMask')
('-', 'MetaModifier')
('-', 'ShiftModifier')

--------------------------------------------------
('-', 'KeyboardModifierMask')
('-', 'AltModifier')
('-', 'ShiftModifier')
...