2017-07-25 3 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のデザイナを生成するクラスを変更しない私はあなたのコードのビットを追加しました

ビュー:

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の場合です。

ロジック:keyPressEvent方法がすでに動作しているものを修正して

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

+0

ありがとう、eyllanesc。私はそれを試みますが、UIを表示することはできません。 – chqbge

+0

それは動作します!ありがとう、eyllanesc! – chqbge