QBoxLayout 은 공간을 행과열로 나누어서 일정한 방향으로 위젯을 배치하는데 사용하는 레이아웃입니다. 주로 QBoxLayout 을 상속받아 만든 QVBoxLayout 과 QHBoxLayout 을 사용합니다. QVBoxLayout 의 V 는 Vertical 의 약자로 세로를 뜻합니다. 레이아웃에 추가한 컨트롤을 일정한 간격을 유지하면서 세로로 배치합니다. 반대로 QHBoxLayout 는 Horizontal 을 뜻하며, 가로 방향으로 배치합니다.
◎ 1. QVBoxLayout |
▼ 먼저 QVBoxLayout 알아보겠습니다. QVBoxLayout 추가한 컨트롤을 세로 방향으로 배치할 때 사용하는 컨트롤입니다. QVBoxLayout 내부에 들어가는 위젯은 버튼으로 하겠습니다. 아래 소스를 통해서 알 수 있듯이 별 다른 설정이 필요없습니다. 그냥 addWidget() 함수를 사용해서 추가하면 자동으로 배치가 됩니다. QVBoxLayout 은 추가한 버튼이 세로로 나열이 되겠죠. 마지막으로 화면에 레이아웃을 추가하기 위해 setLayout() 함수를 사용했습니다.
주의해서 봐야할 것은 MainWindow 가 상속받은 클래스는 QWidget 입니다. QWidget 이나 QDialog 에 레이아웃을 올릴 때는 setLayout() 함수로 가능합니다. 하지만 QMainWindow 을 상속받아 만든 클래스는 화면에 추가하는 방식이 조금 다릅니다.
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QVBoxLayout, \
QApplication, QPushButton,QWidget
class MainWindow(QWidget):
def __init__(self):
super().__init__()
# 윈도우 설정
self.setGeometry(50,50,400,300) # x, y, w, h
self.setWindowTitle('Status Window')
pb1 = QPushButton('버튼1', self)
pb2 = QPushButton('버튼2', self)
pb3 = QPushButton('버튼3', self)
boxlayout = QVBoxLayout()
boxlayout.addWidget(pb1)
boxlayout.addWidget(pb2)
boxlayout.addWidget(pb3)
self.setLayout(boxlayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
▼ QWidget 이나 QDialog 이 아닌 QMainWindow 를 상속받아 화면을 구현할 때는 한단계 더 작업을 거쳐야 합니다. QMainWindow 에 QVBoxLayout 을 바로 추가할 수 없기 때문에 QWidget 을 만들고 MainWindow 의 setCentralWidget() 함수로 추가해야 정상적으로 화면에서 볼 수 있습니다. 위에서 보았던 소스와 달라지는 부분은 다음과 같습니다. 상속 클래스를 QMainWindow 로 바꾸고 setLayout() 삭제한 후 아래 소스를 추가합니다.
# 1. QVBoxLayout 을 생성한다.
boxlayout = QVBoxLayout()
boxlayout.addWidget(pb1)
boxlayout.addWidget(pb2)
boxlayout.addWidget(pb3)
# 2. QWidget 에 QVBoxLayout 객체를 추가한다.
widget = QWidget()
widget.setLayout(boxlayout)
# 3. QMainWindow 에 Widget 을 추가한다
self.setCentralWidget(widget)
◎ 2. QHBoxLayout |
▼ 다음은 QHBoxLayout 레이아웃입니다. 위젯 컨트롤을 일정한 간격으로 가로 배치를 하고 싶다면 QVBoxLayout 을 QHBoxLayout 으로 변경합니다. 변경해야 할 다른 옵션은 없습니다. 단지 클래스만 변경하면 배치 방향을 가로/세로로 전환할 수 있습니다.
from PyQt5.QtWidgets import QHBoxLayout
# 1. QHBoxLayout 을 생성한다.
boxlayout = QHBoxLayout()
boxlayout.addWidget(pb1)
boxlayout.addWidget(pb2)
boxlayout.addWidget(pb3)
# 2. QWidget 에 QVBoxLayout 객체를 추가한다.
widget = QWidget()
widget.setLayout(boxlayout)
# 3. QMainWindow 에 Widget 을 추가한다
self.setCentralWidget(widget)
▼ 위에서 설명한 전체 소스는 다음과 같습니다.
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QHBoxLayout, \
QApplication, QPushButton,QMainWindow, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 윈도우 설정
self.setGeometry(50,50,400,300) # x, y, w, h
self.setWindowTitle('Status Window')
pb1 = QPushButton('버튼1', self)
pb2 = QPushButton('버튼2', self)
pb3 = QPushButton('버튼3', self)
# 1. QHBoxLayout 을 생성한다.
boxlayout = QHBoxLayout()
boxlayout.addWidget(pb1)
boxlayout.addWidget(pb2)
boxlayout.addWidget(pb3)
# 2. QWidget 에 QVBoxLayout 객체를 추가한다.
widget = QWidget()
widget.setLayout(boxlayout)
# 3. QMainWindow 에 Widget 을 추가한다
self.setCentralWidget(widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
'파이썬 Python' 카테고리의 다른 글
파이썬 가상 환경 (Virtual Environments) 만들고 사용하는 방법 (0) | 2024.11.12 |
---|---|
파이썬 리스트(List) 객체 사용 방법 (0) | 2024.11.12 |
파이썬(Python) 문자열 데이터 타입과 연산자 사용하기 (0) | 2024.11.10 |
Python 파이썬 for 문 사용하기 (1) | 2024.11.08 |
파이썬 Python 숫자형 데이터 타입 (정수, 실수) (1) | 2024.10.25 |
파이썬(Python) PyQt5 QGroupBox 사용해서 위젯 그룹 관리하기 (1) | 2024.10.12 |
파이썬(Python) 기본 개발툴 IDLE 편집기 이용하는 방법 (0) | 2024.10.11 |
파이썬(Python) PyQt5 QDial 사용하기 (1) | 2024.10.04 |