본문 바로가기
파이썬 (Python)/파이썬 GUI + PyQt5

PyQt5 파헤치기 QMessageBox Class 이용하기

by ★√★ 2021. 3. 2.

 안녕하세요, Davey 입니다. 오늘 포스팅할 내용은 QMessageBox Class에 대한 내용입니다. QMessageBox를 이용을 하면, 직관적으로 Event 발생을 시킬 수 있을 뿐만 아니라, 코드 구현 여부를 확인 할 수 있습니다.

 

 

 

 

 파이참 내에서 Code 구현이나 실행하는 것을 확인하기 위해서 사용하는 함수가 print()가 있는데, PyQt5에서 Widget을 띄우고 나서는 print() 함수로 확인 할 수 없기 때문에, 다른 Tool이 필요한 상황입니다. 이럴 때 QMessageBox를 이용을 하면, 직관적으로 Event 발생을 시킬 수 있을 뿐만 아니라, 코드 구현 여부를 확인 할 수 있습니다. 이런 장점을 가지고 있는, QMessageBox Class에 대해서 한번 알아보도록 하겠습니다. 

 

 

1. QMessageBox Class

 

: QMessageBox Class는 Message Box를 띄우면서 사용자가 원하는 Event를 구현할 수 있게 해주는 Class 입니다. QMessageBox Class로 구현할 수 있는 Message Type은 아래와 같습니다. 크게 5가지로 나눠질 수 있다라고 생각하시면 됩니다. 

 

 1) about 

 2) information

 3) warning

 4) question

 5) critical

 

 

아래 참조 자료로 연결해주는 Link는 아래에 첨부 하도록 하겠습니다. 

 

 [QMessageBox Class Link]

 

 

 


2. 예제를 통해서 QMessageBox Class 를 구현하기 Part 1

 

: 위에서는 그냥 가장 기본적인 이론만 설명을 드렸습니다. 이론 이기 보다는, 약간의 소개라고 생각하시면 됩니다. 그래서 예제를 통해서 하나 하나 설명 해드릴려고 합니다. 가장 많이 쓰이는 QMessageBox.information을 통해서 설명 드리도록 하겠습니다.

 

 1) QMessageBox.information 구현하기

 : 기존적인 QMessageBox.information의 구조는 아래와 같습니다. 

 

 QMessageBox.information(QWidget *, const QString &, const QString &, QMessageBox::StandardButtons, QMessageBox::StandardButton)

 

- 위의 코드 블럭에서 삽입한 코드에서 Standard Button의 종류는 아래와 같습니다. 5개 버튼을 보여주는 간단한 코드를 구현해보도록 하겠습니다. 아래 코드 블럭에 있는 코드를 실행하면, 5개 다 적용된 메세지 창을 보실 수 있습니다. 아래Snap Shot으로 뜬, Message Box에 모든 Button이 보이는 걸 확인 하실 수 있습니다. 

 

 1) Reset

 2) Yes

 3) Save

 4) No

 5) Canel

 

class QMessage_Demonstration(QMainWindow):
    def __init__(self) :
        super () .__init__ ()
        self.setGeometry(850, 300, 400, 400)   # Window가 등장하는 위치와 Fixedsize아닌 Window Size를 입력할 수 있음.
        self.setFixedSize(400, 300)            # Window Size를 Adjustable 하지 않고, Fixed Type으로 할 경우에 Size를 입력할 수 있음.
        self.setWindowTitle ("QMessage Box Event Activation Menu")


        self.b1 = QtWidgets.QPushButton(self)    # QMessageBox Event를 발생하기 위한 Button 생성
        self.b1.setText("QMessage Box Event Activation")
        self.b1.move(45, 70)
        self.b1.clicked.connect(self.MessageBox_Event)  # Click 시 QMessageBox Event를 발생하기 위해서 함수 연결.
        self.b1.resize(300, 55)
        self.b1.setFont(QtGui.QFont("Arial", 10, QtGui.QFont.Bold))
        self.show()


    def MessageBox_Event(self):
        buttonReply = QMessageBox.information(
            self, 'QMessage Demonstration Menu', "QMessage Demonstration Done",
            QMessageBox.Yes | QMessageBox.Save | QMessageBox.Cancel | QMessageBox.Reset | QMessageBox.No,
            QMessageBox.No
        )

if __name__ == "__main__":
    app = QApplication (sys.argv)
    win = QMessage_Demonstration()
    sys.exit (app.exec_ ())

 

 

 


 

3. 예제를 통해서 QMessageBox Class 를 구현하기 Part 2

 

: 간단하게 2번에서 설명 드린 것처럼 QMessageBox 를 이용해서 메세지 창을 띄어 보았습니다. 그럼 이제는 그 메세지 하나 하나 이벤트를 부여해서, 버튼을 눌렀을 때 이벤트가 발생하는 것을 구현해보도록 하겠습니다. 이벤트 구현 시나리오는 아래와 같습니다. 

 

 1) Reset : Reset Button이 Click이 되었습니다.

 2) Yes : Yes Button이 Click이 되었습니다.

 3) Save : Save Button이 Click이 되었습니다.

 4) No : 아무 이벤트가 발생하지 않음.

 5) Canel : Canel Button이 Click이 되었습니다.

 

 

- 위의 5개의 이벤트를 구현하기 위해서, 아래 코드 블럭에 기재된 코드를 추가하셔야 합니다. 추가하는 위치는 "def MessageBox_Event(self):" 안에 추가하시면 됩니다.

        if buttonReply == QMessageBox.Yes:
            QMessageBox.information(self, 'Notice', 'Yes Button이 Click이 되었습니다.')
        elif buttonReply == QMessageBox.Save:
            QMessageBox.information(self, 'Notice', 'Save Button이 Click이 되었습니다.')
        elif buttonReply == QMessageBox.Cancel:
            QMessageBox.information(self, 'Notice', 'Cancel Button이 Click이 되었습니다.')
        elif buttonReply == QMessageBox.Close:
            QMessageBox.information(self, 'Notice', 'Close Button이 Click이 되었습니다.')
        elif buttonReply == QMessageBox.Reset:
            QMessageBox.information(self, 'Notice', 'Reset Button이 Click이 되었습니다.')

 

 

- 위 코드를 첨부하고, 실행을 시키면 아래와 같이 구현이 가능합니다. 아래와 같이 구현이 되시면, 코드를 잘 구성하신 거라고 생각하시면 됩니다. 

 

 

 이상입니다. 은근히 많이 쓰는 코드로서, 프로그램을 구성하는데 꼭 필요한 코드라고 생각하시면 될 거 같습니다. 버튼의 Type, Message 문구들을 다양하게 표현한다면, User 입장에서 잘 이해가 되는 프로그램을 만들 수 있을 거라고 생각합니다. 그럼 오늘도 공부하느라고 수고하셨고, 이만 마무리 하도록 하겠습니다. 감사합니다.

 

 제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다. 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab