PyQt中的keyPressEvent

问题描述 投票:0回答:1

我正在设计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)

或多或少是我所拥有的。我已经更改了一些小细节,但是在运行程序时还无法打印或返回按下的任何键。

python pyqt pyqt5 keypress
1个回答
0
投票

您应该使用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_())
© www.soinside.com 2019 - 2024. All rights reserved.