본문 바로가기
코딩취미/Python

PySide6 QTabBar 완전 정복 – 탭 추가 감지 및 사용법

by 브링블링 2025. 2. 26.
반응형

📌 PySide6 QTabBar 완전 정복 – 탭 추가 감지 및 사용법

🔹 QTabBar란?

QTabBar는 탭을 관리하는 위젯으로, 여러 개의 콘텐츠를 한 공간에서 전환할 수 있도록 도와줍니다.
이 글에서는 QTabBar의 특징, 탭 추가/삭제 감지, 사용법, 활용 사례를 살펴보겠습니다.


1️⃣ QTabBar의 특징

주요 특징

특징 설명
탭 관리 여러 개의 탭을 추가하고 전환 가능
디자인 자유도 QTabWidget보다 스타일을 자유롭게 조정 가능
탭 전환 가능 setCurrentIndex()로 특정 탭 선택 가능
탭 추가/삭제 감지 tabInserted() 및 tabRemoved() 메서드 활용
아이콘 및 닫기 버튼 추가 가능 setTabIcon() 및 setTabsClosable(True) 사용

QTabBar vs QTabWidget

비교 항목 QTabBar QTabWidget
탭만 제공 ❌ (탭+페이지 관리)
페이지 관리
자유로운 레이아웃
탭 추가/제거 가능
사용 예시 커스텀 탭 디자인이 필요한 경우 일반적인 탭 기반 UI

2️⃣ QTabBar의 사용법

기본 사용법 (QTabBar 생성 및 탭 추가)

from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QTabBar

class TabBarExample(QWidget):
    def __init__(self):
        super().__init__()

        self.tab_bar = QTabBar()
        self.tab_bar.addTab("탭 1")
        self.tab_bar.addTab("탭 2")

        layout = QVBoxLayout()
        layout.addWidget(self.tab_bar)
        self.setLayout(layout)

        self.setWindowTitle("QTabBar 예제")
        self.resize(300, 100)

if __name__ == "__main__":
    app = QApplication([])
    window = TabBarExample()
    window.show()
    app.exec()

 

설명:

  • QTabBar를 생성하고 addTab("탭 이름")으로 탭을 추가합니다.
  • QVBoxLayout()을 사용하여 UI를 구성합니다.
  • resize()를 이용해 창 크기를 조정합니다.

반응형

3️⃣ QTabBar의 탭 개수 확인 및 추가 감지

QTabBar에서 현재 탭 개수를 확인하려면 count() 메서드를 사용합니다.
또한 탭 추가/삭제를 감지하려면 tabInserted() 및 tabRemoved() 메서드를 오버라이드하면 됩니다.

탭 개수 확인 코드

from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QTabBar, QPushButton

class TabBarExample(QWidget):
    def __init__(self):
        super().__init__()

        self.tab_bar = QTabBar()
        self.add_btn = QPushButton("탭 추가")
        self.remove_btn = QPushButton("마지막 탭 삭제")

        # 탭 추가 및 초기화
        self.tab_bar.addTab("탭 1")
        self.tab_bar.addTab("탭 2")

        # 버튼 클릭 시 탭 추가 / 삭제
        self.add_btn.clicked.connect(self.add_tab)
        self.remove_btn.clicked.connect(self.remove_tab)

        # 레이아웃 구성
        layout = QVBoxLayout()
        layout.addWidget(self.tab_bar)
        layout.addWidget(self.add_btn)
        layout.addWidget(self.remove_btn)
        self.setLayout(layout)

        self.setWindowTitle("QTabBar 탭 개수 확인")
        self.resize(300, 150)

    def add_tab(self):
        new_index = self.tab_bar.count()
        self.tab_bar.addTab(f"탭 {new_index + 1}")
        print(f"탭 추가됨! 현재 탭 개수: {self.tab_bar.count()}")

    def remove_tab(self):
        if self.tab_bar.count() > 0:
            self.tab_bar.removeTab(self.tab_bar.count() - 1)
            print(f"탭 삭제됨! 현재 탭 개수: {self.tab_bar.count()}")

if __name__ == "__main__":
    app = QApplication([])
    window = TabBarExample()
    window.show()
    app.exec()

 

설명:

  • count()를 사용하여 현재 탭 개수 확인
  • addTab()을 사용해 새로운 탭 추가
  • removeTab()을 사용해 마지막 탭 삭제
  • 버튼 클릭 시 동적으로 탭 추가/삭제

4️⃣ QTabBar의 활용 사례

📌 1. 설정 화면 (Settings UI)

  • 설정 메뉴를 탭으로 관리
  • QTabWidget을 사용하지 않고 자유롭게 스타일을 커스텀할 때 적합

📌 2. 브라우저 스타일 UI

  • 크롬이나 파이어폭스처럼 탭을 자유롭게 추가/삭제 가능
  • setTabsClosable(True)을 설정하여 닫기 버튼 활성화

📌 3. 다중 문서 인터페이스 (MDI)

  • QTabBar를 활용하여 여러 개의 문서를 한 창에서 관리
  • 예: 텍스트 편집기, 코드 에디터 등

5️⃣ QTabBar 주요 메서드 정리

메서드 설명
addTab("이름") 새 탭 추가
removeTab(index) 특정 인덱스의 탭 제거
count() 현재 탭 개수 반환
setCurrentIndex(index) 특정 탭을 활성화
tabText(index) 특정 인덱스의 탭 이름 반환
setTabIcon(index, QIcon) 탭에 아이콘 추가
setTabsClosable(True) 닫기 버튼 활성화

🔹 결론

✅ QTabBar는 설정 화면, 브라우저 UI, 다중 문서 인터페이스(MDI) 등에서 활용할 수 있습니다.
✅ count()를 사용하면 현재 탭 개수를 쉽게 확인할 수 있습니다.
✅ tabInserted()와 tabRemoved()를 활용하면 탭이 추가되거나 삭제되는 이벤트를 감지할 수 있습니다.
✅ setTabsClosable(True)을 사용하면 닫기 버튼이 있는 탭 UI도 쉽게 만들 수 있습니다.

반응형