본문 바로가기
코딩취미/Python

PySide6 팝업에서 Cancel 클릭 시 메인 GUI 닫기

by 브링블링 2025. 5. 9.
반응형

PySide6 팝업에서 Cancel 클릭 시 메인 GUI 닫기

PySide6는 Python으로 GUI 애플리케이션을 개발할 수 있는 강력한 도구로, 사용자에게 직관적인 인터페이스를 제공할 수 있습니다. 이번 포스팅에서는 팝업 창에서 "Cancel" 버튼을 클릭하면 팝업 창과 메인 GUI가 함께 닫히도록 구현하는 방법을 설명합니다. 이 과정에서 PySide6의 기본 개념과 관련된 기술도 함께 설명합니다.


주요 개념

1. PySide6

  • Python을 위한 Qt GUI 라이브러리입니다.
  • 다양한 GUI 요소를 제공하여 데스크톱 애플리케이션을 쉽게 개발할 수 있습니다.

2. QMessageBox

  • PySide6에서 팝업 메시지를 표시할 수 있는 클래스입니다.
  • 표준 메시지 타입 (정보, 경고, 오류 등)과 사용자 정의 버튼을 제공할 수 있습니다.

3. 이벤트 루프

  • GUI 애플리케이션에서 사용자와의 상호작용을 처리하는 무한 반복 동작입니다.
  • exec()로 실행된 팝업은 모달로 동작하여 이벤트 루프를 잠시 중단할 수 있습니다.

반응형

기본 코드 예제

아래는 PySide6에서 팝업에서 "Cancel" 버튼을 클릭할 때 메인 GUI까지 함께 닫히도록 구현한 예제입니다.

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox, QVBoxLayout, QWidget

class PopupWindow(QMessageBox):
    def __init__(self, main_window):
        super().__init__()
        self.main_window = main_window
        self.setWindowTitle("Popup Window")
        self.setText("This is a popup window.")
        self.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
        self.buttonClicked.connect(self.on_button_clicked)

    def on_button_clicked(self, button):
        if button.text() == "Cancel":
            self.main_window.close()
        self.close()

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Main Window")
        self.setGeometry(100, 100, 300, 200)

        self.initUI()

    def initUI(self):
        self.button = QPushButton("Show Popup", self)
        self.button.clicked.connect(self.show_popup)

        layout = QVBoxLayout()
        layout.addWidget(self.button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def show_popup(self):
        popup = PopupWindow(self)
        popup.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec())

코드 설명

  1. PopupWindow 클래스
    • QMessageBox를 상속받아 팝업으로 사용됩니다.
    • "Cancel" 버튼 클릭 시 메인 GUI도 함께 닫히도록 설정했습니다.
  2. MainWindow 클래스
    • 버튼을 클릭하면 팝업이 나타나도록 구성했습니다.
  3. 팝업 비동기 처리
    • 팝업을 popup.show()로 비동기 실행하여 메인 윈도우가 즉시 닫힐 수 있도록 했습니다.

이해를 돕기 위한 기초 용어

  • 메인 GUI (Main GUI): 사용자가 애플리케이션을 실행할 때 가장 먼저 표시되는 기본 창.
  • 팝업 (Popup): 사용자의 입력이나 확인을 요구하는 임시 창.
  • 비동기 (Asynchronous): 이벤트가 독립적으로 처리되어 즉시 응답할 수 있는 방식.
  • 모달 (Modal): 사용자 입력이 해당 창에서만 가능하도록 만드는 동작 방식.
반응형