프로그래밍/python
PyQt5 QTabWidget 사용법 가이드
마루의 일상
2024. 5. 28. 01:42
728x90
반응형
QTabWidget은 여러 개의 탭을 통해 다양한 콘텐츠를 표시할 수 있도록 도와주는 위젯입니다. 이 포스팅에서는 PyQt5에서 QTabWidget을 사용하는 방법에 대해 자세히 알아보겠습니다.
1. QTabWidget 기본 사용법
기본적인 QTabWidget의 사용법을 이해하기 위해 간단한 예제를 만들어보겠습니다. 아래의 코드는 QTabWidget을 사용하여 두 개의 탭을 생성하는 예제입니다.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget, QWidget, QVBoxLayout, QLabel
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QTabWidget Example")
self.setGeometry(100, 100, 400, 300)
# QTabWidget 생성
self.tab_widget = QTabWidget()
self.setCentralWidget(self.tab_widget)
# 첫 번째 탭 추가
self.tab1 = QWidget()
self.tab_widget.addTab(self.tab1, "Tab 1")
self.tab1_layout = QVBoxLayout()
self.tab1.setLayout(self.tab1_layout)
self.tab1_label = QLabel("This is Tab 1")
self.tab1_layout.addWidget(self.tab1_label)
# 두 번째 탭 추가
self.tab2 = QWidget()
self.tab_widget.addTab(self.tab2, "Tab 2")
self.tab2_layout = QVBoxLayout()
self.tab2.setLayout(self.tab2_layout)
self.tab2_label = QLabel("This is Tab 2")
self.tab2_layout.addWidget(self.tab2_label)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
위 코드는 간단한 QMainWindow를 생성하고, QTabWidget을 중앙 위젯으로 설정한 후, 두 개의 탭을 추가합니다. 각 탭에는 QVBoxLayout을 사용하여 QLabel을 배치했습니다.
2. QTabWidget의 다양한 기능
QTabWidget은 단순히 탭을 추가하는 것 외에도 여러 가지 유용한 기능을 제공합니다.
2.1 탭 아이콘 추가
탭에 아이콘을 추가할 수 있습니다. 아래는 탭에 아이콘을 추가하는 예제입니다.
from PyQt5.QtGui import QIcon
# 탭에 아이콘 추가
self.tab_widget.addTab(self.tab1, QIcon("path/to/icon1.png"), "Tab 1")
self.tab_widget.addTab(self.tab2, QIcon("path/to/icon2.png"), "Tab 2")
2.2 탭 닫기 기능
탭을 닫을 수 있는 버튼을 추가할 수 있습니다.
self.tab_widget.setTabsClosable(True)
self.tab_widget.tabCloseRequested.connect(self.close_tab)
def close_tab(self, index):
self.tab_widget.removeTab(index)
2.3 탭 이동 기능
사용자가 탭을 드래그하여 순서를 변경할 수 있도록 할 수 있습니다.
self.tab_widget.setMovable(True)
3. 고급 사용법: 동적으로 탭 추가 및 제거
동적으로 탭을 추가하거나 제거하는 기능도 구현할 수 있습니다. 아래는 버튼을 눌러 탭을 추가하거나 제거하는 예제입니다.
from PyQt5.QtWidgets import QPushButton
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QTabWidget Example")
self.setGeometry(100, 100, 400, 300)
self.tab_widget = QTabWidget()
self.setCentralWidget(self.tab_widget)
self.tab1 = QWidget()
self.tab_widget.addTab(self.tab1, "Tab 1")
self.tab1_layout = QVBoxLayout()
self.tab1.setLayout(self.tab1_layout)
self.tab1_label = QLabel("This is Tab 1")
self.tab1_layout.addWidget(self.tab1_label)
self.add_tab_button = QPushButton("Add Tab")
self.add_tab_button.clicked.connect(self.add_tab)
self.tab1_layout.addWidget(self.add_tab_button)
self.tab_count = 2
def add_tab(self):
new_tab = QWidget()
new_tab_layout = QVBoxLayout()
new_tab.setLayout(new_tab_layout)
new_tab_label = QLabel(f"This is Tab {self.tab_count}")
new_tab_layout.addWidget(new_tab_label)
self.tab_widget.addTab(new_tab, f"Tab {self.tab_count}")
self.tab_count += 1
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
이 예제에서는 "Add Tab" 버튼을 눌러 새로운 탭을 동적으로 추가할 수 있습니다.
728x90
반응형