2017-07-25 130 views
0

我创建PyQt的GPL V5.4的UI和使用pyuic5转换*的.ui文件*的.pyPyQt5 keyPressEvent如何工作

但我不知道在这个代码是如何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_()) 
+0

关于工作原理,你不清楚哪部分内容?你的意思是如何将对象事件连接到插槽?你是指事件是如何由Qt路由到插槽(即事件处理程序)的?还有别的吗? – ray

回答

1

开始我的回答,不修改生成的Qt Designer中,在你的情况下,由名称的类,我认为你所使用的模板主窗口,在下面的代码中,我加入了一些代码之前,建议您已经删除,你必须做的是创建一个实现生成视图的新类:

观点:

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,并使用setupUI方法除了调用父构造函数,即在你的情况下QMainWindow。

逻辑:

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方法已经工作的那些修饰。

+0

谢谢你,eyllanesc。我尝试了它,但无法显示UI。 – chqbge

+0

它的工作原理!谢谢,eyllanesc! – chqbge