PyQt개발강좌, QTabWidget을 활용한 다중 탭 구성

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_()
    

예제 코드 설명

위의 예제에서 다음과 같은 작업을 수행했습니다:

  1. QApplication 인스턴스 생성: QApplication 객체를 생성하여 PyQt의 이벤트 루프를 시작합니다.
  2. QTabWidget 서브 클래스 정의: MyApp 클래스를 정의하고 QTabWidget을 상속받습니다.
  3. 탭에서 사용할 위젯 생성: 각 탭에 대해 QWidget과 QVBoxLayout을 생성하여 레이아웃을 설정합니다.
  4. 탭 추가: 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의 기능을 습득하고 다양한 애플리케이션을 제작하는 데 도움이 되길 바랍니다.