2017-02-14 20 views
0

おはようございます! I`mは、すぐ下の例をコーディングしながら、ので、いくつかのトラブルに会ったpyQt5とPythonでのQt Designerのを使用して開始します。アプリケーション内のボタンなどに関係なく、のkeyPressEventを使用することです。つまり、「終了」ボタンをクリックすることです。 2つのファイルがあります:1つはデザイナーによって生成され、もう1つはkeyPressEventです。 フォームが開いていますが、何も起こっていません。Escバット。 あなたの股を楽しみにしています! ありがとうございます。PyQt 5 keyPressEventはApp Qtデザイナーを終了するために働いていません

ui_main.py

from PyQt5 import QtCore, QtWidgets 
from PyQt5 import QtQuickWidgets 

class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.resize(400, 300) 
     self.gridLayout = QtWidgets.QGridLayout(MainWindow) 
     self.gridLayout.setObjectName("gridLayout") 
     self.bigWindow = QtQuickWidgets.QQuickWidget(MainWindow) 
     self.bigWindow.setResizeMode(QtQuickWidgets.QQuickWidget.SizeRootObjectToView) 
     self.bigWindow.setObjectName("bigWindow") 
     self.gridLayout.addWidget(self.bigWindow, 0, 0, 1, 1) 
     self.dateTimeEdit = QtWidgets.QDateTimeEdit(MainWindow) 
     self.dateTimeEdit.setObjectName("dateTimeEdit") 
     self.gridLayout.addWidget(self.dateTimeEdit, 1, 0, 1, 1) 
     self.progressBar = QtWidgets.QProgressBar(MainWindow) 
     self.progressBar.setProperty("value", 24) 
     self.progressBar.setObjectName("progressBar") 
     self.gridLayout.addWidget(self.progressBar, 2, 0, 1, 1) 

     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     _translate = QtCore.QCoreApplication.translate 
     MainWindow.setWindowTitle(_translate("MainWindow", "Dialog")) 

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QDialog() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 

py_main.py

import sys 
from PyQt5.QtWidgets import QDialog, QApplication 
from PyQt5.QtCore import Qt 
from ui_main import Ui_MainWindow 


class MyMainWindow(QDialog, Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(MyMainWindow, self).__init__(parent) 
     self.show() 
     self.setupUi(self) 


    def keyPressEvent(self, event): 
      if event.key() == Qt.Key_Escape: 
       self.close() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    win = MyMainWindow() 
    sys.exit(app.exec_()) 

答えて

0

あなたは、コンストラクタで、eventFilterメソッドを使用する必要があります。

qApp.installEventFilter(self) 

その後、我々は法上書き:

def eventFilter(self, obj, event): 
    if event.type() == QEvent.KeyPress: 
     if event.key() == Qt.Key_Escape: 
      self.close() 
    return super(MyMainWindow, self).eventFilter(obj, event) 

完全なコード:私の答えが正しいとしてそれをマークし、してください助け場合

import sys 
from PyQt5.QtWidgets import QDialog, QApplication, qApp 
from PyQt5.QtCore import Qt, QEvent 
from ui_main import Ui_MainWindow 

class MyMainWindow(QDialog, Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(MyMainWindow, self).__init__(parent) 
     qApp.installEventFilter(self) 
     self.setupUi(self) 
     self.show() 

    def eventFilter(self, obj, event): 
     if event.type() == QEvent.KeyPress: 
      if event.key() == Qt.Key_Escape: 
       self.close() 
     return super(MyMainWindow, self).eventFilter(obj, event) 


if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    win = MyMainWindow() 
    sys.exit(app.exec_()) 
+0

は、ヘルプ友人、幸運:) – Michael

+0

@Michaelいただきありがとうございます。 – eyllanesc

+0

問題なし、完了 – Michael

関連する問題