본문 바로가기
PySide or PyQt

QDialog, QMain Window, QWidget에 대해서

by 르면가게 2025. 1. 15.

QDialog (대화 상자)

  • 정의: QDialog는 대화 상자를 나타내며, 주로 사용자와의 단순한 상호작용을 위해 사용됩니다.
  • 주요 특징:
    • 모달 모드: QDialog는 모달(modal)로 설정 가능하며, 모달 대화 상자는 열려 있는 동안 부모 창과의 상호작용을 차단합니다.
      • exec_()를 사용하면 모달 대화 상자를 표시합니다.
    • 경량 구조: 복잡한 레이아웃이나 툴바, 상태바 등이 없는 간단한 창입니다.
    • 용도: 경고창, 설정창, 파일 선택창 등.
  • 예시:
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QLabel, QPushButton, QApplication
import sys

class MyDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QDialog Example")
        layout = QVBoxLayout()
        layout.addWidget(QLabel("This is a QDialog."))
        close_button = QPushButton("Close")
        close_button.clicked.connect(self.close)
        layout.addWidget(close_button)
        self.setLayout(layout)

app = QApplication(sys.argv)
dialog = MyDialog()
dialog.exec_()

QMainWindow (메인 윈도우)

  • 정의: QMainWindow는 애플리케이션의 주 창(main window) 역할을 하며, 복잡한 UI 구조를 지원합니다.
  • 주요 특징:
    • 레이아웃 구조:
      • QMainWindow는 특정한 레이아웃을 갖추고 있습니다. 예를 들어, 중앙 위젯(center widget), 메뉴바(menu bar), 툴바(toolbar), 상태바(status bar) 등을 기본적으로 지원합니다.
    • 복잡한 애플리케이션: 다양한 위젯과 상호작용이 필요한 복잡한 프로그램에 적합합니다.
    • 용도: 텍스트 에디터, 이미지 뷰어, IDE 같은 메인 애플리케이션 창.
  • 예시:
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QMainWindow Example")
        self.setCentralWidget(QLabel("This is the central widget."))

app = QApplication([])
window = MainWindow()
window.show()
app.exec_()

QWidget (기본 위젯)

  • 정의: QWidget는 PyQt5에서 모든 GUI 위젯의 기본 클래스입니다.
  • 주요 특징:
    • 다재다능: QWidget은 컨테이너로 사용하거나, 단순한 창으로 사용할 수 있습니다.
    • 유연한 레이아웃: 모든 위젯은 QWidget에서 파생되며, 이 위젯을 기반으로 사용자 정의 위젯을 생성할 수 있습니다.
    • 용도: 간단한 창, 버튼 그룹, 커스텀 위젯 등 다양한 상황에서 사용.
  • 예시:
     
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QApplication

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QWidget Example")
        layout = QVBoxLayout()
        layout.addWidget(QLabel("This is a QWidget."))
        self.setLayout(layout)

app = QApplication([])
widget = MyWidget()
widget.show()
app.exec_()

 

주요 차이점 비교

특징 QDialog QMainWindow QWidget
기능 단순 대화 상자 애플리케이션의 메인 창 모든 위젯의 기본 클래스
레이아웃 구조 독립적 레이아웃 메뉴바, 툴바, 상태바 등을 지원 커스텀 가능
복잡도 단순함 고급 기능 지원 다재다능
사용 사례 경고창, 설정창 텍스트 에디터, 파일 뷰어 등 간단한 창, 컨테이너
모달 지원 기본적으로 모달 지원 X X