У меня был предыдущий вопрос о QKeySequence здесь . Это сработало, но когда я применил его к своему коду, казалось, что произошла ошибка, когда QKeySequence идет после строки, когда событие нажатия кнопки идет перед строкой QKeySequence.
Примечание: графический интерфейс состоит только из двух кнопок: self.btnDSR и self.btnOther.
Исходя из ответа eyllanesc в предыдущем вопросе, мой код выглядит следующим образом:
class MainWindow(QtWidgets.QMainWindow, test_mainWindow.Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.signals()
@QtCore.Slot()
def test_func(self):
shorcut = self.sender()
sequence = shorcut.key()
print(sequence.toString())
def btn_clicked(self):
QtWidgets.QShortcut(QtGui.QKeySequence("3"), self, activated=self.test_func)
print('Shortcut 3 now works!') # But it doesn't
def signals(self):
QtWidgets.QShortcut(QtGui.QKeySequence("1"), self, activated=self.test_func)
QtWidgets.QShortcut(QtGui.QKeySequence("2"), self, activated=self.test_func)
QtCore.QObject.connect(self.btnDSR, QtCore.SIGNAL('clicked()'), self.btn_clicked)
QtCore.QObject.connect(self.btnOther, QtCore.SIGNAL('clicked()'), self.close)
Ввод только 1 и 2 работает, ввод 3 не работает после нажатия btnDSR. Значение 3 не распечатывается, а номера 1 и 2 - при нажатии. Это сообщение об ошибке возвращается при нажатии 3:
sequence = shorcut.key()
AttributeError: 'NoneType' object has no attribute 'key'
На случай, если это уместно, я также прилагаю свой основной код для тестирования GUI здесь:
from PySide2 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(440, 418)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.btnDSR = QtWidgets.QPushButton(self.centralwidget)
self.btnDSR.setGeometry(QtCore.QRect(120, 110, 93, 28))
self.btnDSR.setObjectName("btnDSR")
self.btnOther = QtWidgets.QPushButton(self.centralwidget)
self.btnOther.setGeometry(QtCore.QRect(150, 180, 141, 28))
self.btnOther.setObjectName("btnOther")
MainWindow.setCentralWidget(self.centralwidget)
self.btnDSR.setText(QtWidgets.QApplication.translate("MainWindow", "DSR Button", None, -1))
self.btnOther.setText(QtWidgets.QApplication.translate("MainWindow", "Other Button", None, -1))
QtCore.QMetaObject.connectSlotsByName(MainWindow)