主要就是重写了一个closeEvent函数达到的效果,
转载自 :
CSDN-专业IT技术社区-登录blog.csdn.net# -*- coting: UTF-8 -*-
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import (QWidget, QPushButton, QApplication, QDesktopWidget, QMessageBox)
from PyQt5.QtCore import QCoreApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
bt = QPushButton("退出", self)
# 按钮的点击事件关联QCoreApplication.instance().quit退出
bt.clicked.connect(QCoreApplication.instance().quit)
bt.resize(bt.sizeHint())
bt.move(50, 50)
# 窗口显示在屏幕中间
self.center()
self.setWindowTitle("quit")
self.show()
# 显示窗口在屏幕中间
def center(self):
# 获得窗口
qr = self.frameGeometry()
# 获得屏幕中心点
cp = QDesktopWidget().availableGeometry().center()
# 显示到屏幕中心
qr.moveCenter(cp)
self.move(qr.topLeft())
# 我们关闭窗口的时候,触发了QCloseEvent。我们需要重写closeEvent()事件处理程序。
# 重写closeEvent函数,使点击右上角的叉号关闭按钮时,弹框提示“Are you sure to quit?”
def closeEvent(self, event):
# 我们显示一个消息框,两个按钮:“是”和“不是”。第一个字符串出现在titlebar。
# 第二个字符串消息对话框中显示的文本。第三个参数指定按钮的组合出现在对话框中。
# 最后一个参数是默认按钮,这个是默认的按钮焦点。
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
# 处理返回值,如果单击Yes按钮,关闭小部件并终止应用程序。否则我们忽略关闭事件。
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec())
效果: