没有继承的PyQt拦截关闭事件

时间:2019-02-05 18:35:58

标签: python pyqt pyqt5

我有一个基于套接字的程序。为了以一种优雅的方式在客户端关闭连接,我必须处理close事件。但是,我在网站上看到的所有关闭事件代码都是使用OOP编写的。由于我的大部分脚本(很长的脚本)都是使用过程范式编写的,因此我尝试实现这些代码,但无法使其正常工作。我该怎么解决?

app = QApplication(sys.argv)

v_box = QVBoxLayout()

window = QWidget()
label = QLabel("Hello World")

v_box.addWidget(label)

def closeEvent(event):
    choice = QMessageBox.question( "Quit", "Do you want to quit chit chat?", QMessageBox.Yes | QMessageBox.No)
    if choice == QMessageBox.Yes:
        s.close()
        event.accept()
    else:
        event.ignore()

app.aboutToQuit.connect(closeEvent)
window.setLayout(v_box)
window.show()
sys.exit(app.exec())

1 个答案:

答案 0 :(得分:0)

您需要拦截窗口的关闭事件,而不是应用程序。正确的方法是创建一个从QWidgetQMainWindow继承并覆盖closeEvent的类,如果您不想使用类,则可以使用{{1} },例如以下示例:

functools