PyQt개발강좌, 탭 동적 생성과 삭제

PyQt는 파이썬에서 Qt 애플리케이션을 개발하기 위한 강력한 라이브러리입니다. Qt는 사용자 인터페이스(UI) 개발을 위한 다양한 도구와 위젯을 제공하는 크로스 플랫폼 프레임워크입니다. 본 강좌에서는 PyQt를 이용하여 탭을 동적으로 생성하고 삭제하는 방법에 대해 알아보겠습니다.

1. PyQt 설치하기

PyQt를 사용하기 위해서는 먼저 PyQt5 라이브러리를 설치해야 합니다. 이를 위해 pip 명령어를 사용할 수 있습니다. 아래 명령어를 터미널 또는 커맨드 프롬프트에 입력하여 PyQt5를 설치하세요.

pip install PyQt5

2. 기본적인 탭 위젯 이해하기

PyQt에서는 QTabWidget 클래스를 사용하여 탭 UI를 생성할 수 있습니다. QTabWidget는 여러 개의 탭을 포함할 수 있으며, 각 탭마다 다양한 위젯들을 추가할 수 있습니다. 기본적인 구조는 다음과 같습니다.

from PyQt5.QtWidgets import QApplication, QTabWidget, QWidget, QVBoxLayout, QPushButton

3. 탭 동적 생성하기

탭을 동적으로 생성하기 위해서는 버튼 클릭 이벤트와 함께 새로운 탭을 추가하는 기능을 구현해야 합니다. 아래의 예제 코드를 확인해보세요.

class MyApp(QTabWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Dynamic Tab Example')
        self.setGeometry(200, 200, 400, 300)

        # 초기 탭 생성
        self.add_new_tab()

        # 탭 추가 버튼
        add_tab_button = QPushButton('Add Tab')
        add_tab_button.clicked.connect(self.add_new_tab)
        self.layout = QVBoxLayout()
        self.layout.addWidget(add_tab_button)

        # 메인 위젯 설정
        container = QWidget()
        container.setLayout(self.layout)
        self.setCentralWidget(container)

    def add_new_tab(self):
        tab_count = self.count()
        self.addTab(QWidget(), f'Tab {tab_count + 1}')  # 새로운 탭 추가

4. 탭 삭제하기

탭을 삭제하기 위해서는 삭제 버튼을 만들어 해당 버튼을 클릭했을 때 선택된 탭을 삭제하는 기능을 추가해야 합니다. 아래의 코드를 통해 삭제 버튼의 기능을 구현해보겠습니다.

        # 탭 삭제 버튼
        remove_tab_button = QPushButton('Remove Tab')
        remove_tab_button.clicked.connect(self.remove_current_tab)
        self.layout.addWidget(remove_tab_button)

    def remove_current_tab(self):
        current_index = self.currentIndex()
        if current_index >= 0:
            self.removeTab(current_index)  # 현재 선택된 탭 삭제

5. 전체 코드 예제

이전에 설명한 내용을 기반으로 전체 코드는 다음과 같습니다. 이 코드는 기본적인 탭 추가 및 삭제 기능을 포함하고 있습니다.

import sys
from PyQt5.QtWidgets import QApplication, QTabWidget, QWidget, QVBoxLayout, QPushButton

class MyApp(QTabWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Dynamic Tab Example')
        self.setGeometry(200, 200, 400, 300)

        self.add_new_tab()

        add_tab_button = QPushButton('Add Tab')
        add_tab_button.clicked.connect(self.add_new_tab)
        
        remove_tab_button = QPushButton('Remove Tab')
        remove_tab_button.clicked.connect(self.remove_current_tab)

        self.layout = QVBoxLayout()
        self.layout.addWidget(add_tab_button)
        self.layout.addWidget(remove_tab_button)

        container = QWidget()
        container.setLayout(self.layout)
        self.setCentralWidget(container)

    def add_new_tab(self):
        tab_count = self.count()
        self.addTab(QWidget(), f'Tab {tab_count + 1}')

    def remove_current_tab(self):
        current_index = self.currentIndex()
        if current_index >= 0:
            self.removeTab(current_index)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    my_app = MyApp()
    my_app.show()
    sys.exit(app.exec_())

6. 추가 기능: 탭 내용 변경하기

탭을 삭제하고 추가하는 것 외에도, 각 탭의 내용을 변경하거나 탭에 위젯을 추가하는 등의 기능을 구현할 수 있습니다. 예를 들어, 각 탭에 다른 종류의 위젯을 추가하여 다양한 기능을 제공할 수 있습니다.

def add_new_tab(self):
        tab_count = self.count()
        new_tab = QWidget()
        layout = QVBoxLayout()
        text_label = QLabel(f'This is content for Tab {tab_count + 1}')
        layout.addWidget(text_label)
        new_tab.setLayout(layout)
        self.addTab(new_tab, f'Tab {tab_count + 1}')

7. 결론

이번 강좌에서는 PyQt를 이용하여 탭을 동적으로 생성하고 삭제하는 방법에 대해 자세히 알아보았습니다. 기본적인 UI 구성 요소에 대한 이해를 바탕으로, 여러분은 이제 더 복잡한 애플리케이션을 설계하고 구현할 수 있는 능력을 갖추게 되었습니다. 향후에는 다양한 PyQt의 기능들을 탐구하고, 자신만의 애플리케이션을 개발해보길 바랍니다.

감사합니다! PyQt를 사용한 개발을 즐기세요!