在很多应用中,如果要操作一个关键的功能,比如退出应用、删除文件的时候,往往会有消息弹出窗口请求确认,让我们用PyQt弹出消息吧!本文由Cescfangs 译自ZetCode pyqt5系列教程 并作适当修改。

先上源代码:

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QMessageBox
class exp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(200, 300, 400, 400)
self.setWindowTitle('Quit')
self.show()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message', 'You sure to quit?',
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = exp()
sys.exit(app.exec_())

当我们关闭一个窗口时,就会触发一个QCloseEvent的事件,正常情况下会直接关闭这个窗口,但是我们不希望这样的事情发生,所以我们需要重新定义QCloseEvent:

def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message', 'You sure to quit?',
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

我们通过QMessageBox创建了一个带有'Yes'和'No'的对话框,括号内的第一个字符(Message)会显示在信息窗口的上方,第二个字符(You sure to quit?)则是出现在信息窗口的正文中,第三个参数则说明了两个按钮在对话框上的布置,最后一个参数确定了默认选项,也就是弹出对话框的时候,键盘的默认焦点所在。最后返回的结果会存储在reply中。

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

如果我们按下了'Yes',那么这个窗口就会被关闭,如果我们按下的是'No',那么系统会忽视我们点击‘X’的这个事件。

python quit python quit_confirm_pyqt5 输入确认

对话框