2017-07-25 65 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