2017-07-25 3 views
0

ich eine UI von PyQt GPL v5.4 erstellen und pyuic5 convert * .ui-Datei * PyWie PyQt5 keyPressEvent arbeitet

Aber ich weiß nicht verwenden, wie keyPressEvent Arbeit in diesem Code !!

Es sollte für QWidget funktionieren, aber wie es funktioniert.

Bitte helfen!

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

Welchen Teil sind Sie nicht klar darüber, wie es funktioniert? Meinst du, wie Objekt Ereignisse mit Slots verbunden sind? Meinst du, wie das Ereignis von Qt an den Slot (d. H. Event-Handler) geroutet wird? Etwas anderes? – ray

Antwort

1

Eine Empfehlung vor meiner Antwort beginnen, nicht die Klasse nicht ändern, die Qt Designer Ich denke, man verwendet die Vorlage Mainwindow, im folgenden Code erzeugt ich hinzugefügt, dass Sie in Ihrem Fall mit dem Namen ein Stück Code was Sie haben, entfernt, tun müssen, ist eine neue Klasse erstellen, die die erzeugte Ansicht implementiert:

Ansicht:

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")) 

die Klasse, die die Ansicht implementiert aus der Klasse der Vorlage erben müssen, in Ihr Fall von QMainWindow, und verwenden Sie die setupUI-Methode zusätzlich zum Aufruf des übergeordneten Konstruktors, dh in Ihrem Fall von QMainWindow.

Logik:

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_()) 

Mit diesen Änderungen der keyPressEvent Methode bereits funktioniert.

+0

Danke, eyllanesc. Ich versuche es, aber es kann die Benutzeroberfläche nicht anzeigen. – chqbge

+0

Es funktioniert! Danke, Eyllanesc! – chqbge