• 티스토리 홈
  • 프로필사진
    소쩍소쩍이
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
소쩍소쩍이
  • 프로필사진
    소쩍소쩍이
    • 분류 전체보기 (51) N
      • 파이썬 (18)
        • 문제 및 예제 (8)
      • PySide6 (15) N
        • Signal & Slot (6)
        • Layout (8)
        • Model & View (1) N
      • 리눅스 (5)
      • 아두이노 (0)
      • 일지 (11)
  • GitHub
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • QTabWidget
      2026년 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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바