1. 코드

from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QMessageBox
from PyQt5.QtCore import QCoreApplication
import sys

class 메세지다이얼로그(QWidget):

    def __init__(self):
        super().__init__()
        self.UI초기화()

    def UI초기화(self):

        btn = QPushButton('프로그램 종료',self)
        btn.clicked.connect(self.close)  
        btn.move(20, 50)

        btn2 = QPushButton("에러 발생",self)
        btn2.move(130,50)
        btn2.clicked.connect(self.critical)

        btn3 = QPushButton("경고 발생",self)
        btn3.move(240,50)
        btn3.clicked.connect(self.warning)

        self.setWindowTitle('QMessageBox')
        self.setGeometry(300, 300, 350, 200)
        self.show()

    def close(self): 

        question = QMessageBox.question(self, '질문 메세지 창',\\
                               '정말 종료하시겠습니까?',\\
                               QMessageBox.Yes | QMessageBox.No , QMessageBox.No)
        
        if question == QMessageBox.Yes: 
            super().close()
          
    def critical(self):
        cri = QMessageBox.critical(self, '에러 창',\\
                               '심각한 에러가 생겼습니다.',\\
															 QMessageBox.Help| QMessageBox.Reset | QMessageBox.Apply)

    def warning(self):
        warn = QMessageBox.warning(self, "경고 창",\\
                               '에러가 날 수 있는 문제가 생겼습니다.',
															 QMessageBox.Ok|QMessageBox.Retry|QMessageBox.Ignore)

프로그램무한반복 = QApplication(sys.argv)
실행인스턴스 = 메세지다이얼로그()
프로그램무한반복.exec_()

2. 상세 내용

QMessageBox는 질문창 또는 사용자에게 정보를 주거나 받을 수 있는 창을 만들 수 있습니다.

출처: https://doc.qt.io/qt-5/qmessagebox.html

출처: https://doc.qt.io/qt-5/qmessagebox.html

btn.clicked.connect(self.close)

close() 함수(슬롯)은 이미 정의 되어있기 때문에 재정의 합니다.

def close(self):

    question = QMessageBox.question(self, '질문 메세지 창', '정말 종료하시겠습니까?',
                                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

    if question == QMessageBox.Yes:
        super().close()

여러개의 버튼을 추가할 때에는 각 버튼을 추가하는 명령어 사이에 | 넣어야합니다. 파이프라고 부르며 엔터 위에 있습니다. Shift를 누르고 해당 버튼을 누르시면 됩니다. 아래는 옵션 값입니다.

출처: https://doc.qt.io/qt-5/qmessagebox.html

출처: https://doc.qt.io/qt-5/qmessagebox.html

만약 Yes 버튼이 눌렀다면 프로그램을 종료합니다.

def critical(self):
    cri = QMessageBox.critical(self, '에러 창', '심각한 에러가 생겼습니다.',
                               QMessageBox.Help | QMessageBox.Reset | QMessageBox.Apply)

def warning(self):
    warn = QMessageBox.warning(self, "경고 창", '에러가 날 수 있는 문제가 생겼습니다.',
                               QMessageBox.Ok | QMessageBox.Retry | QMessageBox.Ignore)