2015-04-09 1 views
0

Я знаю, как это можно сделать в стиле ООП, но я заинтересован в полном понимании PyQt, видя, как набор инструментов GUI можно запрограммировать как в ориентированном на объект и процедурный подход.PyQt - Связывание событий (вызов функции при возникновении QCloseEvent) - Процедурный стиль

Мой вопрос в том, как связать событие закрытия приложения (щелкните крест приложения) с функцией в коде ниже? Как это можно вызывать, когда приложение закрывается?

import sys 
from PyQt5.QtWidgets import (QWidget, QToolTip, 
    QPushButton, QApplication, QMessageBox) 
from PyQt5.QtGui import QFont 


def closeEvent(event): 
    reply = QMessageBox.question(w, 'Message', 
     "Are you sure to quit?", QMessageBox.Yes | 
     QMessageBox.No, QMessageBox.No) 

    if reply == QMessageBox.Yes: 
     event.accept() 
    else: 
     event.ignore() 

app = QApplication(sys.argv) 

w = QWidget() 

w.setGeometry(300, 300, 300, 200) 
w.setWindowTitle('Procedural event binding - PyQt') 
w.show() 

sys.exit(app.exec_()) 

Спасибо за ваше время.

ответ

1

Вы можете просто переписать существующий closeEvent виджета:

w.closeEvent = closeEvent 

и что будет работать в вашем примере.

Если вы хотите, связанный метод, вы можете сделать:

import types 
... 

def closeEvent(self, event): 
    reply = QMessageBox.question(self, 'Message', 
    ... 

w.closeEvent = types.MethodType(closeEvent, w) 
+0

Отлично, спасибо. – sw123456