PyQt5 之訊息盒子

Galois發表於2020-03-30

預設情況下,點選標題欄的 × 按鈕,QWidget 就會關閉。但是有時候,會修改預設行為。比如,如果程式開啟的是一個文字編輯器,並且做了一些修改,這時候需要在點選關閉按鈕的時候讓使用者進一步確認操作。
如果關閉 QWidget,就會產生一個 QCloseEvent,並且把它傳入到 closeEvent 函式的 event 引數中。改變控制元件的預設行為,就是替換掉預設的事件處理。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Message box')
        self.show()

    def closeEvent(self, event):
        # 建立一個訊息框,上面有倆按鈕:Yes 和 No. 第一個字串顯示在訊息框的標題欄,第二個字串顯示在對話方塊,第三個引數是訊息框的倆按鈕,最後一個引數是預設按鈕,這個按鈕是預設選中的。返回值在變數 reply 裡
        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_())
  • QMessageBox.question()
本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要試圖用百米衝刺的方法完成馬拉松比賽。

相關文章