Python 如何在PyQT5中为QPlainTextEdit(或任何其他组件)实现密钥侦听器

Python 如何在PyQT5中为QPlainTextEdit(或任何其他组件)实现密钥侦听器,python,python-3.x,qt,pyqt,pyqt5,Python,Python 3.x,Qt,Pyqt,Pyqt5,虽然我意识到其他人也问过类似的问题,但我有限的知识似乎导致了这个谜题的缺失。下面我将进一步解释为什么这个问题以前没有得到回答 下面是我正在使用的代码(由QT creator生成) 我尝试通过简单地复制和粘贴到我的Ui_MainWindow类来实现这个解决方案,但什么也没有发生 这是正确的代码吗?如果是,具体如何实施?我把它放在哪里 我完全迷茫了 谢谢,Qt设计器提供了一种简单的方法来创建GUI,但它只实现设计而不实现逻辑,您要执行的任务是逻辑的一部分。为此,建议创建一个使用以前设计的新类 为此,

虽然我意识到其他人也问过类似的问题,但我有限的知识似乎导致了这个谜题的缺失。下面我将进一步解释为什么这个问题以前没有得到回答

下面是我正在使用的代码(由QT creator生成)

我尝试通过简单地复制和粘贴到我的Ui_MainWindow类来实现这个解决方案,但什么也没有发生

这是正确的代码吗?如果是,具体如何实施?我把它放在哪里

我完全迷茫了


谢谢,

Qt设计器提供了一种简单的方法来创建GUI,但它只实现设计而不实现逻辑,您要执行的任务是逻辑的一部分。为此,建议创建一个使用以前设计的新类

为此,必须创建一个名为main.py的新文件,该文件必须与Qt Designer生成的文件位于同一文件夹中。对于Qt Designer生成的文件,我将其称为design.py:

.
├── design.py
└── main.py
此类继承自用作模板的窗口:QMainWindow和生成的设计,您必须调用setupUi()来填充小部件

from PyQt5 import QtCore, QtGui, QtWidgets

from design import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)
    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

虽然它是为PyQt4编写的,但它确实解释了如何解决这个问题。唯一的区别是您需要使用
qtwidget
而不是
QtGui
。你也可以阅读PyQt5文档。最后,我可以使用关键事件!谢谢旁注:对于其他人,请确保从main.py而不是design.py运行,否则除了关键事件无法工作外,所有内容都将相同。此函数不会在任何地方调用,它是如何检测任何按键的?@nickm,如果您希望帮助上传到github,以便能够分析问题所在。@nickm或询问满足所有SO要求的问题。无需额外代码,只需询问此问题的后续内容,以解释此功能的工作原理
.
├── design.py
└── main.py
from PyQt5 import QtCore, QtGui, QtWidgets

from design import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)
    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())