- QTabWidget2026년 05월 26일
- 소쩍소쩍이
- 작성자
- 2026.05.26.:43
QTabWidget 정리
QTabWidget는 여러 화면을 탭 형태로 나누어 관리할 수 있는 위젯이다. 탭을 클릭하면 다른 화면으로 전환되며, 설정 화면이나 메뉴 화면처럼 여러 기능을 구분할 때 자주 사용한다.
QTabWidget 핵심 기능
• addTab() : 새로운 탭 추가
• currentChanged : 현재 탭이 변경될 때 실행되는 시그널
• setCurrentIndex() : 원하는 탭으로 이동
• tabText() : 탭 이름 가져오기
widget.py
메인 화면 역할을 하는 파일이며 QTabWidget을 생성하고 각각의 탭을 추가한다. 또한 버튼 클릭 이벤트와 탭 변경 이벤트도 연결하였다.
from PySide6.QtWidgets import ( QWidget, QHBoxLayout, QVBoxLayout, QTabWidget, QPushButton, QLabel, QLineEdit ) from form_tab import FormTab from buttons_tab import ButtonsTab class Widget(QWidget): def __init__(self): super().__init__() # 윈도우 제목 self.setWindowTitle("QTabWidget 데모") # [1] 탭 위젯 생성 tab_widget = QTabWidget(self) self.widget_form = FormTab() self.widget_buttons = ButtonsTab() # 로그인 탭 추가 생성 widget_login = QWidget() line_edit_full_id = QLabel("로그인") line_edit_full_pw = QLabel("비밀번호") line_edit_id = QLineEdit() line_edit_pw = QLineEdit() line_edit_id.setPlaceholderText("아이디를 입력하세요") line_edit_pw.setPlaceholderText("비밀번호를 입력하세요") btn_login = QPushButton("확인") id_layout = QVBoxLayout() id_layout.addWidget(line_edit_full_id) id_layout.addWidget(line_edit_id) id_layout.addWidget(line_edit_full_pw) id_layout.addWidget(line_edit_pw) id_layout.addWidget(btn_login) widget_login.setLayout(id_layout) # 버튼에 기능 추가 self.widget_buttons.button_1.clicked.connect(self.button_1_clicked) self.widget_buttons.button_2.clicked.connect(self.button_2_clicked) self.widget_buttons.button_3.clicked.connect(self.button_3_clicked) # [4] 탭 위젯에 탭 추가 tab_widget.addTab(self.widget_form, "정보 입력") tab_widget.addTab(self.widget_buttons, "버튼들") tab_widget.addTab(widget_login, "로그인") # 탭 변경하기 tab_widget.currentChanged.connect(self.tab_canged) # [5] 위젯 전체 레이아웃 설정 layout = QVBoxLayout() layout.addWidget(tab_widget) self.setLayout(layout) def button_1_clicked(self): print("버튼 1을 클릭 하셨습니다.") def button_2_clicked(self): print("버튼 2을 클릭 하셨습니다.") def button_3_clicked(self): print("버튼 3을 클릭 하셨습니다.") def tab_canged(self, index): tab_widget = self.findChild(QTabWidget) tab_text = tab_widget.tabText(index) print(f"{tab_text}입니다.")
buttons_tab.py
버튼만 모아둔 탭이며 QPushButton을 세로 방향으로 배치하였다.
from PySide6.QtWidgets import ( QWidget, QVBoxLayout, QPushButton ) class ButtonsTab(QWidget): def __init__(self): super().__init__() self.button_1 = QPushButton("버튼 1") self.button_2 = QPushButton("버튼 2") self.button_3 = QPushButton("버튼 3") buttons_layout = QVBoxLayout() buttons_layout.addWidget(self.button_1) buttons_layout.addWidget(self.button_2) buttons_layout.addWidget(self.button_3) self.setLayout(buttons_layout)
form_tab.py
입력 폼 역할을 하는 탭이며 이름 입력 기능과 탭 이동 기능을 추가하였다.
from PySide6.QtWidgets import ( QWidget, QHBoxLayout, QVBoxLayout, QPushButton, QLabel, QLineEdit ) class FormTab(QWidget): def __init__(self): super().__init__() label_full_name = QLabel("이름 :") line_edit_full_name = QLineEdit() line_edit_full_name.setPlaceholderText("이름을 입력하세요") btn_name = QPushButton("이름 확인") btn_name.clicked.connect(self.btn_name_clicked) btn_move = QPushButton("2번째 탭으로 이동") btn_move.clicked.connect(self.go_to_second_tab) form_layout = QHBoxLayout() form_layout.addWidget(label_full_name) form_layout.addWidget(line_edit_full_name) from_btn_layout = QVBoxLayout() from_btn_layout.addLayout(form_layout) from_btn_layout.addWidget(btn_name) from_btn_layout.addWidget(btn_move) self.line_edit_full_name = line_edit_full_name self.setLayout(from_btn_layout) def btn_name_clicked(self): input_data = self.line_edit_full_name.text().strip() if input_data == "": print("이름을 먼저 입력해 주세요") else: print(input_data) def go_to_second_tab(self): tab_widget = self.parent() if tab_widget is not None: tab_widget.setCurrentIndex(1)
실행 결과
탭을 누르면 각각 다른 화면으로 이동하며 버튼 클릭이나 입력 기능도 정상적으로 동작하는 것을 볼 수 있다.



'PySide6 > Layout' 카테고리의 다른 글
주요 레이아웃 (0) 2026.05.26 QScrollArea (0) 2026.05.26 NestedLayout (0) 2026.05.26 QFormLayout (0) 2026.05.26 QGridLayout (0) 2026.05.26 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)