본문 바로가기
GUI 튜토리얼/PyQt5 한꼬집씩만 따라해보기

2. QMainWindow의 엄마, QWidget

by 일코 2022. 11. 21.

지난 포스팅

2022.11.21 - [기타/PyQt5 한꼬집씩만 따라해보기] - 1. PyQt5 GUI의 기본 틀부터 시작합시다.

 

1. PyQt5 GUI의 기본 틀부터 시작합시다.

지난 포스팅 2022.11.21 - [기타/PyQt5 한꼬집씩만 따라해보기] - 들어가며 들어가며 PyQt5에 대해 다루는 포스팅이나 강의, 또는 서적이가 국내외에 참 많습니다. 그럼에도 이렇게 저만의 PyQt5 튜토리

martinii.fun


 

이번 포스팅에서는 : QMainWindow와 비슷한 QWidget의 정체

이번 포스팅에서는 QMainWindow와 박빙으로 중요한 QWidget에 대해 가볍게 다뤄보겠습니다.

우선 아래 코드를 보면 어떤 느낌이 드시나요?

from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication([])
win = QWidget()

win.show()
app.exec()

 

'어? 이전 포스팅에서 보여준 코드랑 넘 비슷한데?'

 

맞아요. 실행결과도 거의 같아요.

위 코드를 실행해보면

차이점이라면 기본 사이즈가 조금 크다 정도?

QMainWindow와 QWidget은 사실 많이 닮아 있기도 해요.

그도 그럴 것이 QWidget은 바로, QMainWindow의 엄마거든요!

 

이전 포스팅 마지막에서 QMainWindow가 정의된 코드를 한 번 쭉 훑어봤는데, 아래 코드 첫 번째 라인만 읽어보면

class QMainWindow(QWidget):
    """ QMainWindow(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags()) """
    def actionEvent(self, *args, **kwargs): # real signature unknown
        pass

 

class QMainWindow(QWidget):~ 이라는 코드가 보이시죠?

이게 QMainWindow가 QWidget의 자식이라는 뜻이에요.

좀 더 전문적인 공식용어를 써보자면
QMainWindow는 QWidget을 상속받아 생성된 클래스라는 의미입니다.
이 때 QWidget을 QMainWindow의 부모클래스 또는 수퍼클래스라고 부릅니다.
같은 맥락에서 QMainWindow는 QWidget의 자식클래스 또는 서브클래스라고 부릅니다.
이렇게 클래스가 정의되어 있으면 부모클래스에서 정의된 메서드를 자식클래스에서도 사용할 수 있습니다.
참고로 QWidget의 메서드 개수는 무려 270여개입니다.
이중 QMainWindow가 같은 이름의 메서드를 재정의(=오버라이딩)한 갯수가 약 50여개니까
QMainWindow에서 사용가능한 메서드 갯수는 대략 100 + 270 - 50 = 320개 정도가 되겠네요.
그런데... 어쩌다 이런 이야기를 하게 된 거지;;

 

하여튼 QWidget과 QMainWindow는 부모자식 관계라서 뭔가 비슷할 것 같지만,

두 위젯의 차이는 각각의 이름만큼이나 확실합니다.

QMainWindow는 실제로 최상위 메인윈도우로만 활용할 목적으로 개조된 클래스이고,

QWidget은 "레이아웃"을 포함한 어떤 위젯도 담을 수 있는, 포용력 넘치는 스케치북(?) 같은 클래스입니다.

나중에 자세히 다루겠지만
한 가지 큰 차이를 들어보면
레이아웃 위젯은 QMainWindow에 직접 담을 수 없습니다.
QWidget.setLayout(레이아웃)으로 레이아웃을 QWidget에 담은 다음,
그 QWidget을 QMainWindow에 넣어야 합니다.

 

마치며

(원래 안 그러려고 했는데) 이번 포스팅에서 클래스에 대한 용어를 너무 많이 다뤘습니다.

아마 다시는 이렇게 객체지향 용어를 언급하는 일이 없을 것입니다.

너무 걱정하지 말아주시고, 어서 다음 포스팅으로 넘어갑시다!

 


다음 포스팅

2022.11.21 - [기타/PyQt5 한꼬집씩만 따라해보기] - 3. 어떤 위젯도 최상위 윈도우가 될 수 있다?

 

3. 어떤 위젯도 최상위 윈도우가 될 수 있다?

지난 포스팅 2022.11.21 - [기타/PyQt5 한꼬집씩만 따라해보기] - 2. QMainWindow의 엄마, QWidget 2. QMainWindow의 엄마, QWidget 지난 포스팅 2022.11.21 - [기타/PyQt5 한꼬집씩만 따라해보기] - 1. PyQt5 GUI의 기본 틀부

martinii.fun

 

댓글