PyQt5 keyPressEvent如何工作
我从PyQt GPL v5.4创建了一个UI,并使用pyuic5将 .ui文件转换为 .py
但是我不知道keyPressEvent在这段代码中是如何工作的!
它应该对QWidget有效,但是如何使其起作用。
请帮忙!
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget
class Ui_MainWindow(QWidget,object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(200, 200)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(50, 110, 75, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))\
def keyPressEvent(self, e):
if e.key() == Qt.Key_F5:
self.close()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QWidget()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
-
开始我的答案之前的建议,不要修改生成Qt
Designer的类,在您的情况下,我想您使用的名称是模板MainWindow,在以下代码中,我添加了一些已删除的代码,您必须执行的操作创建一个新类,该类实现生成的视图:视图:
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(200, 200) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.setCentralWidget(self.centralwidget) self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(50, 110, 75, 23)) self.pushButton.setObjectName("pushButton") self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "PushButton"))
在您使用QMainWindow的情况下,实现视图的类必须从模板的类继承,并且除了调用父构造函数(即您在QMainWindow的情况)之外,还必须使用setupUI方法。
逻辑:
class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent=parent) self.setupUi(self) def keyPressEvent(self, e): if e.key() == Qt.Key_F5: self.close() if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) w = MainWindow() w.show() sys.exit(app.exec_())
经过这些修改,keyPressEvent方法已经可以使用。