PySide2 | Выяснение, какая QKeySequence была нажата
Я использую PySide2 и хочу иметь несколько ярлыков, которые выполняют ту же функцию, но также будут зависеть от того, какая клавиша была нажата.
Я попытался связать функции как таковые внутри QMainWindow:
QtWidgets.QShortcut(QtGui.QKeySequence("1"),self).activated.connect(self.test_func)
QtWidgets.QShortcut(QtGui.QKeySequence("2"),self).activated.connect(self.test_func)
Так что они оба выполняют эту функцию.
def test_func(self, signal):
print(signal)
Надеясь, что печать ("1") происходит, когда нажимается клавиша "1", и печать ("2") происходит, когда нажимается вторая клавиша. Когда я попытался запустить это и нажать клавиши 1 и 2, я получаю эту ошибку:
TypeError: test_func() missing 1 required positional argument: 'signal'
Как я могу сделать это?
1 ответ
Решение
Активированный сигнал не отправляет никакой информации, поэтому единственный вариант - получить объект, который испускает сигнал (т.е. QShortcut), чтобы получить QKeySequence, а из последнего строку:
from PySide2 import QtCore, QtGui, QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
QtWidgets.QShortcut(QtGui.QKeySequence("1"), self, activated=self.test_func)
QtWidgets.QShortcut(QtGui.QKeySequence("2"), self, activated=self.test_func)
@QtCore.Slot()
def test_func(self):
shorcut = self.sender()
sequence = shorcut.key()
print(sequence.toString())
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())