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

다이얼로그(Dialog)들어가며다이얼로그(Dialog)개념종류1️⃣ 모달 다이얼로그(Modal Dialog)2️⃣ 모델리스(비모달) 다이얼로그(Modeless Dialog)사용 예시참고 사이트