안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.
코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.
업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.
오늘은 Pyqt5를 다루면서 항상 의문이었던 부분을 정리해보려 합니다.
바로 파이썬 Pyqt5 패키지로 GUI 창을 만들 때 사용되는 QWidget, QDialog, QMainWindow 클래스 3형제들입니다.
class MyWindow(QWidget):
def __init__(self):
super().__init__()
구글링하면 Pyqt5 관련 패키지의 코드들을 보면 QWidget이 들어간 자리에 이 3형제들이 골고루 들어가 있어서 혼란스러웠기에 저같은 분들이 있으실 듯 하여 정리해보는 시간을 갖기로 하였습니다.
참고로 제가 즐겨 사용하는 qt designer을 켜면 아래와 같이 3가지 클래스(Dialog, Main Window, Widget)를 선택하는 창이 가장 처음 출력됩니다.
1. QWidget
QWidget을 딱 한마디로 설명하면 버튼, input 위젯 같은 다양한 위젯들을 올려놓을 수 있는 사각형의 영역입니다.
즉, 그림을 그릴 수 있는 도화지 같은 것이죠.
특징으로는 Main Window와 다르게 상단의 메뉴창과 하단의 상태창을 추가할 수 없습니다.
2. QMainWindow
위에서 잠시 보았던 QWidget과 비슷하지만 조금 다릅니다.
QMainWindow는 최상위 위젯으로 메뉴바, 도구 모음, 상태바등이 포함된 미리 정의된 레이아웃을 가지고 있습니다.
qt designer의 객체 탐색기를 살펴보면 QMainWindow라는 상위 클래스에 QWidget이 속해 있는 것을 알 수 있죠.
즉, MainWindow를 도화지와 도화지를 담고 있는 프레임이라고 생각하시면 됩니다.
3. QDialog
항상 별도의 창에 표시되는 대화상자로, 주로 우리가 흔히 보는 팝업창이나 경고창 역할을 주로 합니다.
아래의 그림에서 보시면 기본 템플릿에서 버튼을 제공하는 것이 있는데, 주로 사용자가 간단히 확인, 취소 버튼을 누를 때 사용하기 때문입니다. 아직 테스트는 해보지 않았지만 버튼을 최대로 넣을 수 있는 제한 같은게 있다고 하네요.
겉보기에는 Qwidget과 별 다를 것이 없죠?
4. Modal, Modeless 개념 (참고)
위에서 배운 기본적인 GUI 창 3형제를 더 깊이 이해하려면 Modal 및 Modaless의 개념에 대해서 알아야 합니다.
두 개념은은 MainWindow를 제외한 Widget과 Dialog에서 사용하는 실행 형식입니다.
참고로 Dialog 창은 Modal 속성을 주로 사용한답니다.
1) Modal
- 새롭게 Modal 속성을 가진 창이 열렸을 경우 기존에 있던 창을 사용하지 못하는 '제어권 독점' 방식입니다.
(이 특성을 이용해서 중요한 메세지를 표시하는 Dialog는 거의 Modal 창을 이용합니다.)
- exec()의 실행 형식으로 독립적입니다. (이 부분은 좀 더 공부 필요)
2) Modeless
- 어느 하나의 Dialog 창이 있어도 프로그램 제어권을 독점하지 않으므로 다른 작업이 가능합니다. (즉, 다른창을 선택 가능)
- show()의 실행 형식으로 독립적이지 않습니다. (이 부분은 좀 더 공부 필요)
<참고자료>
1. 개발자 라면_QWidget과 QDialog의 차이 - Modal/Modeless
https://flower0.tistory.com/457
2. 타스의 개발 블로그_[MFC] Modal&Modeless Dialog: 설명
'파이썬 패키지 > GUI 프로그램' 카테고리의 다른 글
PyQt를 상업적으로 사용하고 싶다면? 정답은 PySide6 (0) | 2022.01.05 |
---|---|
[파이썬 GUI 프로그래밍] 잡플래닛 리뷰 정보 크롤링 GUI 프로그램 (2) | 2021.05.22 |
[파이썬 GUI 프로그래밍] PyQt5 기초_3강.Qt Designer로 내마음대로 GUI 구성하기 (0) | 2021.05.10 |
[파이썬 GUI 프로그래밍] PyQt5 기초_2강.위젯의 종류, 시그널과 슬롯, 이벤트 루프 (0) | 2021.05.08 |
[파이썬 GUI 프로그래밍] PyQt5 기초_1강.PyQt의 개념과 창 만들기 (창 이름, 사이즈, 변경 및 아이콘 삽입) (1) | 2021.05.07 |