탭은 제한된 화면에 여러 컨트롤들을 올리기 위해 만들어진 레이아웃 입니다. 의미 있는 섹션으로 나눠서 컨트롤들을 배치할 수 있기 때문에 사용자뿐만 아니라 설계 측면에서도 유용한 형태라 자주 사용합니다. PyQt5 에서는 탭 구현을 위해 QTabWidget 위젯을 제공합니다.
▼ 탭 생성을 위해서 QTabWidget 을 사용합니다. QTabWidget 위젯의 addTab() 함수를 이용하면 탭 추가가 가능합니다. addTab() 의 인수는 QWidget() 로 객체를 생성합니다.
from PyQt5.QtWidgets import QWidget, QTabWidget
# Tab Widget
tabs = QTabWidget()
tabs.addTab(QWidget(), 'One')
tabs.addTab(QWidget(), 'Two')
tabs.addTab(QWidget(), 'Three')
▼ 탭을 추가한 전체 소스는 다음과 같습니다.
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QTabWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 윈도우 설정
self.setGeometry(100, 100, 600, 300) # x, y, w, h
self.setWindowTitle('Status Window')
# Tab Widget
tabs = QTabWidget()
tabs.addTab(QWidget(), 'One')
tabs.addTab(QWidget(), 'Two')
tabs.addTab(QWidget(), 'Three')
# QMainWindow 추가
self.setCentralWidget(tabs)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
▼ 실행결과는 다음과 같습니다. 3개의 탭이 추가되었으며, addTab() 의 매개변수로 넘긴 이름이 표시되었습니다. 다음은 추가된 탭 레이아웃 안에 컨트롤들을 올려 보겠습니다.
▼ 추가하는 방법은 동일하게 QTabWidget 의 addTab() 함수를 이용합니다. 단지 컨트롤을 구성하는 함수를 만들어서 리턴값을 addTab() 의 매개변수로 넘길 것입니다. 형태는 아래와 같습니다.
# Tab Widget
tabs = QTabWidget()
tabs.addTab(self.make_tab1(), 'One')
tabs.addTab(self.make_tab2(), 'Two')
tabs.addTab(self.make_tab3(), 'Three')
▼ addTab() 매개변수로 입력한 함수는 QWidget 객체를 리턴합니다. 그리고 함수 내부에서는 QVBoxLayout(), QHBoxLayout() 같은 Layout 위젯을 이용해서 컨트롤을 구성한 후 QWidget 의 setLayout() 함수에 추가합니다. 아래는 첫 번째 탭을 구성하는 함수 내부의 소스입니다.
# 첫번째 탭 생성함수
def make_tab1(self):
# 버튼 객체 만들기
button1 = QPushButton('버튼1', self)
button2 = QPushButton('버튼2', self)
button3 = QPushButton('버튼3', self)
# 레이아웃 만들기
vbox = QVBoxLayout()
vbox.addWidget(button1)
vbox.addWidget(button2)
vbox.addWidget(button3)
# 위젯에 레이아웃 추가하기
tab = QWidget()
tab.setLayout(vbox)
return tab
▼ 이런 식으로 3개의 함수를 만들어서 QTabWidget() 에 추가하고 완성은 전체 소스는 다음과 같습니다.
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, \
QTabWidget, QVBoxLayout, QPushButton, QCheckBox, QRadioButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 윈도우 설정
self.setGeometry(100, 100, 400, 300) # x, y, w, h
self.setWindowTitle('Status Window')
# Tab Widget
tabs = QTabWidget()
tabs.addTab(self.make_tab1(), 'One')
tabs.addTab(self.make_tab2(), 'Two')
tabs.addTab(self.make_tab3(), 'Three')
# QMainWindow 추가
self.setCentralWidget(tabs)
# 첫번째 탭 생성함수
def make_tab1(self):
# 버튼 객체 만들기
button1 = QPushButton('버튼1', self)
button2 = QPushButton('버튼2', self)
button3 = QPushButton('버튼3', self)
# 레이아웃 만들기
vbox = QVBoxLayout()
vbox.addWidget(button1)
vbox.addWidget(button2)
vbox.addWidget(button3)
# 위젯에 레이아웃 추가하기
tab = QWidget()
tab.setLayout(vbox)
return tab
def make_tab2(self):
# 버튼 객체 만들기
check1 = QCheckBox('체크버튼1', self)
check2 = QCheckBox('체크버튼2', self)
check3 = QCheckBox('체트버튼3', self)
# 레이아웃 만들기
vbox = QVBoxLayout()
vbox.addWidget(check1)
vbox.addWidget(check2)
vbox.addWidget(check3)
# 위젯에 레이아웃 추가하기
tab = QWidget()
tab.setLayout(vbox)
return tab
def make_tab3(self):
# radio 버튼
radio1 = QRadioButton('레디오버튼1', self)
radio2 = QRadioButton('레디오버튼2', self)
radio3 = QRadioButton('레디오버튼3', self)
# 레이아웃 만들기
vbox = QVBoxLayout()
vbox.addWidget(radio1)
vbox.addWidget(radio2)
vbox.addWidget(radio3)
# 위젯에 레이아웃 추가하기
tab = QWidget()
tab.setLayout(vbox)
return tab
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
▼ 실행한 결과로 첫 번째 탭에 버튼을, 두 번째 탭에 체크박스, 세 번째 탭에 라디오 박스가 들어가 있는 것을 확인할 수 있습니다.
'파이썬 > PyQt5' 카테고리의 다른 글
파이썬(Python) PyQt5 QTreeWidget 사용하기 (0) | 2021.11.24 |
---|---|
파이썬(Python) PyQt5 QTooltip 툴팁 표시하기 (0) | 2021.11.23 |
파이썬(PyQt5) QSplitter 위젯 이용해서 조절 가능한 영역 만들기 (0) | 2021.11.20 |
파이썬(Python) PyQt5 Qt Designer 다운받아 화면 구현하기 (0) | 2021.11.19 |
파이썬(Python) PyQt5 QSlider 사용하기 (0) | 2021.11.17 |