728x90
728x90

다이얼로그(Dialog)

들어가며

  • PyQt에서 다이얼로그(Dialog)의 의미와 종류를 간단하게 정리해본다.

 

다이얼로그(Dialog)

개념

  • 사용자와 상호작용하기 위해 나타나는 별개의 창
  • 일반적으로 다이얼로그는 사용자로부터 입력을 받거나, 확인 및 경고 메시지를 표시하는 데 사용된다.

 

종류

  • PyQt에서는 주로 @QDialog@ 클래스를 사용하여 다이얼로그를 구현한다.
  • PyQt에서 다이얼로그는 다음과 같은 2가지 형태로 제공된다.

 

1️⃣ 모달 다이얼로그(Modal Dialog)

  • 사용자에게 해당 창과 상호작용을 완료하기 전까지는 다른 창과의 상호작용을 허용하지 않는다.
  • @exec_()@ 메서드를 호출하여 표시하며, 사용자가 다이얼로그를 닫기 전까지 다른 창과의 상호작용을 차단한다.

 

2️⃣ 모델리스(비모달) 다이얼로그(Modeless Dialog)

  • 사용자가 다른 창과 동시에 상호작용을 할 수 있도록 허용한다.
  • @show()@ 메서드를 호출하여 표시하며, 사용자가 다른 창과 상호작용할 수 있다.

 

사용 예시

모달 다이얼로그
import sys
from PyQt6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QDialogButtonBox

class MyDialog(QDialog):
    def __init__(self, parent=None):
        super(MyDialog, self).__init__(parent)
        self.setWindowTitle("모달 다이얼로그 예제")
        
        # 레이아웃 설정
        layout = QVBoxLayout(self)
        
        # 라벨 추가
        label = QLabel("Hello World!", self)
        layout.addWidget(label)
        
        # 버튼 추가 (확인, 취소)
        buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self)
        layout.addWidget(buttons)
        
        buttons.accepted.connect(self.accept)
        buttons.rejected.connect(self.reject) 

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = MyDialog()
    
    # 모달 다이얼로그 방식
    if dialog.exec_() == QDialog.Accepted:
        print("확인을 눌렀습니다.")
    else:
        print("취소를 눌렀습니다.")

 

모델리스 다이얼로그
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton, QDialog, QVBoxLayout, QLabel

class ModelessDialog(QDialog):
    def __init__(self, parent=None):
        super(ModelessDialog, self).__init__(parent)
        self.setWindowTitle("모델리스(비모달) 다이얼로그 예제")
        layout = QVBoxLayout(self)
        layout.addWidget(QLabel("Hello World!"))

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("메인창")
        self.setGeometry(100, 100, 300, 200)
        
        # 모델리스 다이얼로그를 열기 위한 버튼
        self.button = QPushButton("모델리스 다이얼로그 열기", self)
        self.button.clicked.connect(self.open_dialog)
        self.setCentralWidget(self.button)
        
        # 다이얼로그 인스턴스를 저장할 변수
        self.dialog = None

    def open_dialog(self):
        # 다이얼로그가 이미 열려있지 않으면 새로 생성
        if self.dialog is None:
            self.dialog = ModelessDialog(self)
        
        # 모델리스 방식으로 다이얼로그 표시
        self.dialog.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

 

 

참고 사이트

 

QDialog — Qt for Python

QDialog The QDialog class is the base class of dialog windows. More… Inherited by: QAbstractPrintDialog, QPageSetupDialog, QPrintDialog, QPrintPreviewDialog, QColorDialog, QErrorMessage, QFileDialog, QFontDialog, QInputDialog, QMessageBox, QProgressDialo

doc.qt.io

 

728x90
728x90