PyQt5学习笔记(五):弹出对话框请求确认

在很多应用中,如果要操作一个关键的功能,比如退出应用、删除文件的时候,往往会有消息弹出窗口请求确认,让我们用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’的这个事件。

对话框

推荐阅读更多精彩内容