keyPressEvent в PyQt - PullRequest
       20

keyPressEvent в PyQt

0 голосов
/ 06 февраля 2019

Я планирую эксперимент с PyQt5.Все, что я хочу, это во время одного из окон в сложенном виджете, все нажатые клавиши будут сохранены в списке.Это, вероятно, глупый вопрос, но я некоторое время работал над ним и рассмотрел по крайней мере двадцать вопросов о переполнении стека и не могу заставить его работать.

Я попытался создать собственный виджет и добавил его вмое окно.

class KeyboardWidget(QWidget):
    keyPressed = pyqtSignal(str)
    def keyPressEvent(self, keyEvent):
        self.keyPressed.emit(keyEvent.key())

...

window.aList = []
def keyCounter():
    window.aList.append(keyPressEvent)
    return window.aList

if ui.screens.currentIndex() == 4:
    breathCount = KeyboardWidget(window)
    breathCount.setFocus()
    breathCount.keyPressed.connect(keyCounter)

Это более или менее то, что у меня есть.Я изменил несколько мелких деталей, но мне еще не удалось напечатать или вернуть какие-либо клавиши, нажатые при запуске программы.

1 Ответ

0 голосов
/ 06 февраля 2019

Вы должны использовать keyEvent.text(), чтобы получить имя ключа, метод key() вернет целое число, также вы пропустили параметр в вашем методе keyCounter, чтобы получить имя ключа:

import sys

from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget, QApplication


class KeyboardWidget(QWidget):
    keyPressed = pyqtSignal(str)

    def keyPressEvent(self, keyEvent):
        self.keyPressed.emit(keyEvent.text())


class MyApplication(QApplication):
    def __init__(self, args):
        super().__init__(args)

        self.keyList = []

        self.keyboardWidget = KeyboardWidget()
        self.keyboardWidget.keyPressed.connect(self.keyCounter)

        self.keyboardWidget.show()

    def keyCounter(self, key):
        self.keyList.append(key)
        print(key)


if __name__ == '__main__':
    app = MyApplication(sys.argv)
    sys.exit(app.exec_())
...