pyqt5 关闭按钮显示提示信息
pyqt默认创建的程序是点击右上角关闭按钮直接关闭软件的,所以我们如果想要在点击关闭按钮时显示提示信息或者其他操作,就需要重写这个closeEvent方法。
首先新建一个类,类名随意取一个就好,这里用Dialog就行了吧,继承下QtWidgets.QMainWindow这个类。
class Dialog(QtWidgets.QMainWindow):
然后重写下这个closeEvent方法,重写这个方法有两种写法,一种可以随意添加或者命名按钮,一种比较简单,直接显示yes 或者 no,
方法一预览:
![](https://img-blog.csdnimg.cn/20200709133658227.png)
方法二预览:
![](https://img-blog.csdnimg.cn/20200709133902392.png)
方法一的代码:
def closeEvent(self, event):
reply = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Question, self.tr("提示"), self.tr("汝妻子我养之,汝勿虑之。\n 汝特么确定要退出吗?"), QtWidgets.QMessageBox.NoButton, self)
yr_btn = reply.addButton(self.tr("是的我要退出"), QtWidgets.QMessageBox.YesRole)
reply.addButton(self.tr("最小化到托盘"), QtWidgets.QMessageBox.NoRole)
reply.exec_()
if reply.clickedButton() == yr_btn:
event.accept()
QtWidgets.qApp.quit()
# sys.exit(app.exec_())
else:
event.ignore()
# 最小化到托盘
方法二的代码:
def closeEvent(self, event):
# 默认直接调用QMessageBox.question 弹出询问的方法
reply = QtWidgets.QMessageBox.question(self,
'本程序',
"是否要退出程序?",
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
if reply == QtWidgets.QMessageBox.Yes:
event.accept()
elif reply == QtWidgets.QMessageBox.No:
event.ignore()
MainWindow.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.FramelessWindowHint)
MainWindow.showMinimized()
else:
# 最小化到托盘
MainWindow.setWindowFlags(QtCore.Qt.SplashScreen | QtCore.Qt.FramelessWindowHint)
MainWindow.showMinimized()
需要注意的是方法一中最小化到托盘其实并不能用,这段代码是我从一大段程序中摘出来的,点击最小化到托盘其实功能和方法二中的no效果是一样的。