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

4. QMainWindow에 위젯을 넣어봅시다.

by 일코 2022. 11. 21.

지난 포스팅

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


 

이번 포스팅에서는 : QMainWindow 안에 위젯 넣기

지난 포스팅에서 QMainWindow 뿐만 아니라, QWidget이나 QWidget을 상속한 다양한 위젯도

최상위 윈도우로 만들 수 있었습니다.

하지만 활용하기는 어렵죠. 버튼이나 레이블 하나만 있는 GUI를 어디다 쓰겠습니까ㅜ

그래서 이 포스팅부터는 거의 항상 QMainWindow가 최상위 윈도우가 되고

QMainWindow 안에 다양한 위젯을 넣어보는 방식으로 튜토리얼을 진행하겠습니다.

우선 지난 포스팅에서 만들어본 푸쉬버튼을 메인윈도우 안에 넣어봅시다.

재미있게도 메인윈도우는 한 개의 위젯만 담을 수 있습니다.

여러 개의 위젯을 넣는 게 불가능하다는 뜻은 아닙니다.
parent 인자나 QDockWidget 등을 통해
여러 개의 위젯을 메인윈도우에 억지로 집어넣을 수는 있지만
레이아웃 조정이 너무 어렵습니다.
그래서 메인윈도우에는 딱 하나의 위젯만 담는 게 가장 좋습니다.
보다 정확히 표현하면
메인윈도우는 일반적으로 setCentralWidget(위젯) 메서드를 통해
단 하나의 위젯만을 센트럴위젯으로 정하게 됩니다.
그럼 해당 위젯이 QMainWindow를 꽉 채워요.
이번 포스팅에서는 센트럴위젯에 버튼 하나만 담을 예정이고요.

그럼 어떻게 여러 개의 위젯을 메인윈도우에 담을 수 있을까요?

미리 답을 드리면,
QWidget을 하나 만들고 그 안에 이것저것 위젯들 다 담고 나서
그 QWidget을 메인윈도우의 센트럴위젯으로 설정하면 됩니다.
그건 차차 튜토리얼을 진행하면서 귀에 못이 박히게 알려드리겠습니다.
...미리 궁금해핳실 분들을 위해 짧게 설명드렸습니다.

코드를 먼저 보여드리겠습니다.

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

app = QApplication([])
win = QMainWindow()
win.setWindowTitle("나만의 앱")

button = QPushButton("눌러주세요")
win.setCentralWidget(button)

win.show()
app.exec()

 

위 코드의 줄거리를 간략히 설명드리면

app이라는 이름의 이벤트핸들러를 생성하고, (3)
메인윈도우를 win이라는 이름으로 생성하고, (4)
메인윈도우의 타이틀을 "나만의 앱"으로 설정합니다. (5)
그리고 버튼을 하나 생성한 다음 (7)
해당 버튼을 메인윈도우 win의 센트럴위젯으로 설정합니다. (8)
마지막으로 메인윈도우를 보이게 하고(9), 이벤트핸들러를 실행합니다. (10)

 

그럼 원하는대로 GUI가 생성되는지 한 번 실행해볼까요?

Shift-Alt-F10으로 해당 py파일을 실행해봅니다.

원하는대로 잘 생성됐네요. 사이즈도 쭉쭉 늘이고 줄일 수 있고요.

(센트럴 위젯도 메인윈도우 사이즈에 맞춰 같이 변하네요?)

 

지금까지 알려드린 그나마 의미있는 내용을 요약해보면

1. (거의 모든 경우) QMainWindow로 메인윈도우를 생성한다.

2. 메인윈도우의 센트럴 위젯으로 딱 하나의 위젯(QWidget 또는 QWidget의 후손들 중 하나)만 선택할 수 있다.

3. 메인윈도우와 별개로 QApplication, 이벤트핸들러를 먼저 생성하고, 코드 마지막에 .exec()로 실행해야 한다.

정도가 되겠습니다.

다음 포스팅에서는 메인윈도우의 초기 사이즈를 정하는 방법을 소개하겠습니다.

 


다음 포스팅

2022.11.21 - [기타/PyQt5 한꼬집씩만 따라해보기] - 5. 메인윈도우의 초기사이즈 정하기

 

5. 메인윈도우의 초기사이즈 정하기

지난 포스팅 2022.11.21 - [기타/PyQt5 한꼬집씩만 따라해보기] - 4. QMainWindow에 위젯을 넣어봅시다. 4. QMainWindow에 위젯을 넣어봅시다. 지난 포스팅 2022.11.21 - [기타/PyQt5 한꼬집씩만 따라해보기] - 3. 어

martinii.fun

 

댓글