PyQt는 Python에서 Qt 프레임워크를 사용하여 GUI 애플리케이션을 개발할 수 있게 해주는 강력한 라이브러리입니다. 다양한 위젯을 제공하여 복잡한 사용자 인터페이스를 쉽게 구성할 수 있습니다. 그 중에서 QTabWidget
은 여러 페이지를 탭의 형태로 구성할 수 있는 유용한 위젯입니다. 이 글에서는 QTabWidget의 기본 개념과 사용법에 대해 자세히 설명하고, 실제 예제 코드를 통해 다중 탭을 구현하는 방법을 알아보겠습니다.
QTabWidget 개요
QTabWidget은 여러 개의 탭을 생성하고 각 탭마다 다른 위젯이나 내용을 표시할 수 있는 컨테이너입니다. 사용자는 탭을 클릭하여 다른 페이지로 전환할 수 있으며, 이는 사용자에게 친숙한 탐색 경험을 제공합니다. 일반적인 사용 사례로는 다중 설정, 문서 편집기, 정보 표시 등 다양한 사용자 인터페이스를 구성할 수 있습니다.
QTabWidget의 기본 구성 요소
- 탭 (Tab): 각 탭은의 글자가 있으며, 이를 통해 사용자는 해당 페이지를 식별하고 선택할 수 있습니다.
- 페이지 (Page): 각 탭은 특정 위젯이나 레이아웃을 포함하며, 사용자가 선택한 탭에 따라 표시됩니다.
- 신호 (Signals): 사용자가 탭을 클릭하면 신호가 발생하고, 이를 통해 특정 기능을 실행할 수 있습니다.
QTabWidget 사용법
QTabWidget은 PyQt에서 사용하는 일반적인 위젯 방법과 마찬가지로, 객체 생성 후 위젯을 추가하고 설정할 수 있습니다. 기본적인 사용 방법은 다음과 같습니다:
from PyQt5.QtWidgets import QApplication, QTabWidget, QWidget, QVBoxLayout, QLabel
class MyApp(QTabWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QTabWidget 예제')
# 첫 번째 탭 생성
tab1 = QWidget()
tab1_layout = QVBoxLayout()
tab1_layout.addWidget(QLabel('첫 번째 탭 내용입니다.'))
tab1.setLayout(tab1_layout)
# 두 번째 탭 생성
tab2 = QWidget()
tab2_layout = QVBoxLayout()
tab2_layout.addWidget(QLabel('두 번째 탭 내용입니다.'))
tab2.setLayout(tab2_layout)
# 탭에 페이지 추가
self.addTab(tab1, '탭 1')
self.addTab(tab2, '탭 2')
if __name__ == '__main__':
app = QApplication([])
window = MyApp()
window.show()
app.exec_()
예제 코드 설명
위의 예제에서 다음과 같은 작업을 수행했습니다:
- QApplication 인스턴스 생성: QApplication 객체를 생성하여 PyQt의 이벤트 루프를 시작합니다.
- QTabWidget 서브 클래스 정의: MyApp 클래스를 정의하고 QTabWidget을 상속받습니다.
- 탭에서 사용할 위젯 생성: 각 탭에 대해 QWidget과 QVBoxLayout을 생성하여 레이아웃을 설정합니다.
- 탭 추가: addTab 메서드를 사용하여 각 위젯을 탭에 추가합니다.
고급 기능
QTabWidget은 추가적인 기능을 통해 사용자에게 더욱 풍부한 경험을 제공합니다:
- 아이콘 추가: 각 탭에 아이콘을 추가할 수 있어 더 직관적인 인터페이스를 제공할 수 있습니다.
- 탭 순서 변경: 사용자가 드래그 앤 드롭으로 탭의 순서를 변경할 수 있도록 설정할 수 있습니다.
- 신호 처리: 탭의 변경 이벤트를 처리하여 특정 작업을 수행할 수 있습니다.
아이콘 추가 예제
from PyQt5.QtGui import QIcon
# 아이콘 설정
self.addTab(tab1, QIcon('icon1.png'), '탭 1')
self.addTab(tab2, QIcon('icon2.png'), '탭 2')
탭 변경 이벤트 처리 예제
self.currentChanged.connect(self.on_tab_changed)
def on_tab_changed(self, index):
print(f'현재 선택된 탭: {index}')
실전 예제: 다중 탭 구성
이제 실제로 여러 탭을 가지고 있으면서, 각 탭에 다양한 위젯을 배치하는 예제를 살펴보겠습니다. 이번 예제에서는 설정 페이지와 정보 페이지 두 개의 탭을 가진 애플리케이션을 구현해보겠습니다.
from PyQt5.QtWidgets import QApplication, QTabWidget, QWidget, QVBoxLayout, QLabel, QPushButton, QLineEdit, QFormLayout
class SettingsTab(QWidget):
def __init__(self):
super().__init__()
layout = QFormLayout()
self.username = QLineEdit()
self.password = QLineEdit()
layout.addRow('사용자 이름:', self.username)
layout.addRow('비밀번호:', self.password)
self.setLayout(layout)
class InfoTab(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
layout.addWidget(QLabel('사용 방법: 아래의 설정을 입력하세요.'))
layout.addWidget(QLabel('설정이 완료되면, 저장 버튼을 클릭하세요.'))
save_button = QPushButton('설정 저장')
layout.addWidget(save_button)
self.setLayout(layout)
class MyApp(QTabWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('다중 탭 예제')
self.addTab(SettingsTab(), '설정')
self.addTab(InfoTab(), '정보')
if __name__ == '__main__':
app = QApplication([])
window = MyApp()
window.show()
app.exec_()
예제 코드 설명
위의 예제에서는 두 가지의 탭을 구축했습니다:
- SettingsTab: 사용자 이름과 비밀번호를 입력 받는 폼 레이아웃을 가지고 있습니다.
- InfoTab: 사용 방법을 설명하고 설정 저장 버튼을 배치합니다.
타입과 레이아웃을 다르게 구성하여 정보와 설정을 효과적으로 분리할 수 있습니다.
마무리
QTabWidget은 PyQt 애플리케이션에서 다중 페이지를 효과적으로 관리할 수 있는 유용한 도구입니다. 본 글에서는 QTabWidget의 기본 개념 및 사용법, 아이콘 추가, 이벤트 처리, 그리고 실전 예제를 통해 다중 탭 구현 방법을 살펴보았습니다. QTabWidget을 활용하여 사용자가 보다 쉽게 정보를 찾고 사용할 수 있는 UI를 만들어 보세요. 더 많은 PyQt의 기능을 습득하고 다양한 애플리케이션을 제작하는 데 도움이 되길 바랍니다.