본문으로 바로가기

파이썬(Python) PyQt5 QMessageBox 구현하기

category 파이썬/PyQt5 2021. 11. 2. 14:29
반응형

QMessageBox 은 사용자가 버튼을 클릭해서 요구한 내용에 대해 결과나 관련 정보를 통보하기 위해 쓰이는 대화상자입니다. 기본적으로 QMessageBox 를 종료하지 않으면 부모창을 제어할 수 없는 Model 대화상자입니다.

 

메시지박스는 QMessageBox 클래스를 사용합니다. 사용을 위해 QMessageBox 객체를 생성합니다. 클래스는 PyQt5.QtWidgets 패키지 안에 있습니다.

from PyQt5.QtWidgets import QMessageBox 

# QDialog 설정
self.msg = QMessageBox()

 

메시지박스 실행을 위해 버튼을 추가하고 Clicked 이벤트 슬롯에 messagebox_open() 사용자 함수를 추가했습니다. 내부에는 QMessageBox 객체 관련 설정들이 들어가 있습니다.

self.button.clicked.connect(self.messagebox_open)

# 버튼 이벤트 함수
def messagebox_open(self):
    self.msg.setIcon(QMessageBox.Information)
    self.msg.setWindowTitle('MessageBox Test')
    self.msg.setText('MessageBox Information')
    self.msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    retval = self.msg.exec_()

 

MessageBox 설정은 다음과 같습니다.

self.msg.setIcon(QMessageBox.Information)
self.msg.setWindowTitle('MessageBox Test')
self.msg.setText('MessageBox Information')
self.msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
retval = self.msg.exec_()

 

MessageBox setIcon() 은 화면에서 왼쪽 느낌표 아이콘을 말합니다. 종류는 다음과 같습니다.

 

  • QMessageBox.NoIcon : 값은 0 이며, 기본값이다. 메시지 박스에 아이콘을 표시
  • QMessageBox.Information : 값은 1 이며, 느낌표 아이콘 표시
  • QMessageBox.Warning : 값은 2 이며, 느낌표 아이콘에 배경이 노란색 삼각형 표시
  • QMessageBox.Critial : 값은 3 이며, 오류를 나타낼 때 표시
  • QMessageBox.Question : 값은 4 이며, 물음표 아이콘 표시

 

setStandardButton() 함수의 파라미터로 아래 값들을 조합해서 입력합니다. 비트 연산자 중 OR(|) 을 사용해서 아래 두 가지 이상의 플래그를 조합니다.

 

메시지박스에서 어느 버튼을 클릭했는지는 어떻게 판단할까요? QMessageBox exec_() 함수를 실행하고 받은 리턴값을 QMessageBox 플래그로 비교하는 것입니다.

retval = self.msg.exec_()

# 반환값 판단
print('QMessageBox 리턴값 ', retval)
if retval == QMessageBox.Ok :
    print('messagebox ok : ', retval)
elif retval == QMessageBox.Cancel :
    print('messagebox cancel : ', retval)

 

전체 소스는 다음과 같습니다.

#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import *

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        # 윈도우 설정
        self.setGeometry(300, 300, 400, 300)  # x, y, w, h
        self.setWindowTitle('Status Window')

        # QButton 위젯 생성
        self.button = QPushButton('MessageBox Button', self)
        self.button.clicked.connect(self.messagebox_open)
        self.button.setGeometry(10, 10, 200, 50)

        # QDialog 설정
        self.msg = QMessageBox()

    # 버튼 이벤트 함수
    def messagebox_open(self):
        self.msg.setIcon(QMessageBox.Information)
        self.msg.setWindowTitle('MessageBox Test')
        self.msg.setText('MessageBox Information')
        self.msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
        retval = self.msg.exec_()

        # 반환값 판단
        print('QMessageBox 리턴값 ', retval)
        if retval == QMessageBox.Ok :
            print('messagebox ok : ', retval)
        elif retval == QMessageBox.Cancel :
            print('messagebox cancel : ', retval)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())
반응형