IT 컴퓨터

D+33 [PySide6] 핵심 프레임워크는 무엇 일까?

goodjop79 님의 블로그 2026. 5. 26. 01:16

ㅇ 일 자 : 2026년 5월 22일(금) 

    PySide6 핵심 프레임워크의 방대한 내용을 한눈에 파악하고 구조적으로 이해할 수 있도록 정리 했다.

1. PySide6 핵심 아키텍처 및 UI 컴포넌트

1.1. PySide6 핵심 아키텍처 & GUI 기본 구조

  • QApplication: 전체 앱의 생명 주기와 사용자 입력(마우스, 키보드) 등 모든 이벤트를 관리하는 최상위 엔진
  • QMainWindow: 메뉴바, 툴바, 상태바를 기본으로 포함하는 완성형 메인 윈도우 구조틀
  • QWidget: 화면에 표시되는 모든 UI 구성요소(위젯)의 최상위 부모 클래스
  • QAction: 메뉴나 툴바 아이템처럼 사용자의 '명령 행동'을 추상화하여 관리하는 객체

 

2. Signal & Slot (이벤트 처리 구조)

PySide6에서 컴포넌트 간 데이터를 주고받고 이벤트를 처리하는 핵심 소통 방식

  • Signal (신호): 위젯에 이벤트(클릭, 값 변경 등)가 발생했을 때 외부에 알리는 발생 장치
  • Slot (슬롯): Signal을 전달받아 실제 비즈니스 로직을 수행하는 연결된 함수(Function)
  • Signal & Slot 처리 구조

 

 

3. 레이아웃 매니저 (Layout Managers)

화면 크기가 변하더라도 위젯들을 절대 좌표가 아닌, 수학적·구조적 규칙에 따라 자동 배치하는 도구

레이아웃 클래스 배치 방식 및 특징 주요 활용 예시
QVBoxLayout 위젯을 세로(Vertical) 방향으로 일렬 배치 메인 메뉴, 입력 폼 세로 정렬
QHBoxLayout 위젯을 가로(Horizontal) 방향으로 일렬 배치 하단 확인/취소 버튼 바
QGridLayout 행(Row)과 열(Column)의 바둑판 표 형태로 배치 계산기 키패드, 대시보드
QFormLayout 왼쪽에 레이블, 오른쪽에 입력창을 갖는 2열 구조 로그인 화면, 회원가입 양식
  • 중첩 레이아웃: 레이아웃 안에 또 다른 레이아웃을 넣어 복잡한 화면을 설계하는 방식
  • Stretch & Spacing: stretch는 위젯 간의 확장 비율을, spacing은 위젯 사이의 간격(여백)을 조정

 

4. 카테고리별 핵심 위젯 (Widgets) 요약

① 기본 입력 위젯 (Input Widgets)

  • QLineEdit: 단일 행 텍스트 입력창 (ID, 비밀번호 등).
  • QTextEdit: 여러 줄 문장 입력 및 서식(Rich Text) 지원 창 (본문 작성).
  • QCheckBox / QRadioButton: 다중 선택 체크박스 및 택일형 라디오 버튼.
  • QComboBox: 공간을 절약하는 드롭다운 선택 상자.
  • QSpinBox / QDoubleSpinBox: 각각 정수 및 실수를 화살표나 타이핑으로 입력받는 창.
  • QDateEdit / QTimeEdit: 날짜 및 시간 선택 위젯.

② 표시 및 상태 위젯 (Display Widgets)

  • QLabel: 화면에 텍스트, 이미지(QPixmap), 스타일을 표현하는 출력 위젯.
  • QProgressBar: 작업 진행 상태(%)를 시각적으로 보여주는 바.
  • QLCDNumber: 디지털시계처럼 숫자만 LCD 형태로 크게 표시하는 위젯.

5. 고급 기능 및 데이터 프레임워크

5.1. 컨테이너 및 대화상자 (Containers & Dialogs)

위젯들을 묶어서 화면을 효율적으로 분할하거나, 별도의 팝업 창을 띄워 소통하는 구조

 

① 컨테이너 위젯 (화면 공간 관리)

  • QGroupBox: 연관된 위젯들을 그룹 테두리로 묶고 제목을 붙여 시각적 분류 제공.
  • QTabWidget: 상단 탭을 눌러 한 공간에서 여러 페이지를 전환하며 보기.
  • QStackedWidget: 탭 없이 코드 제어를 통해 화면 전체를 통째로 전환 (페이지 넘기기)
  • QScrollArea: 컨텐츠가 화면보다 클 때 스크롤바를 자동 생성.
  • QSplitter: 사용자가 마우스로 경계선을 끌어서 좌우/상하 영역 크기를 조절하는 분할 

② 표준 다이얼로그 (Standard Dialogs)

  • QMessageBox: 경고, 알림, 예/아니오 확인 등 단순 팝업 메시지 창.
  • QFileDialog: 운영체제 표준 파일 열기 / 저장 창.
  • QColorDialog / QFontDialog: 색상 피커 및 폰트 변경 표준 창.
  • QInputDialog: 사용자에게 간단한 한 줄 텍스트나 숫자를 즉시 입력받는 팝업.

 

6. 데이터 표시 프레임워크: Widget형 vs Model/View형

  • Widget 방식 (QListWidget, QTableWidget, QTreeWidget): 데이터와 화면 컴포넌트가 결합하여 코드가 직관적이고 다루기 쉬우나, 데이터가 아주 많아지면 무거워집니다.
  • Model/View 방식 (QListView, QTableView, QTreeView): 데이터 모델(Model)과 화면 출력(View)을 철저히 분리합니다. 수만 개 이상의 대용량 데이터를 처리하거나 실시간 필터링(QSortFilterProxyModel)을 구현할 때 매우 효율적입니다.
  • 필터 정렬 (Filter / Sort) : QSortFilter Proxy Model

 

7. 스타일링 및 성능 최적화 (Styling & Threads)

① UI 디자인 (Style)

  • setStyleSheet(): 웹의 CSS와 유사한 QSS(Qt Style Sheets) 문법을 사용하여 위젯의 배경색, 테두리, 둥글기, 폰트 등을 자유롭게 꾸밀 수 있습니다. 애플리케이션 전체에 일괄 적용하여 다크 모드 등을 쉽게 구현합니다.

② 백그라운드 처리 (Performance)

  • QTimer: 대기 상태 없이 일정 주기(ms 단위)마다 특정 Slot 함수를 반복 실행합니다. (디지털시계, 카운트다운 등에 필수).
  • QThread & Worker 구조: 대용량 파일 읽기나 네트워크 다운로드처럼 오래 걸리는 작업을 메인 GUI 스레드와 분리하여 백그라운드에서 실행합니다. 만약 분리하지 않으면 화면이 얼어붙는(먹통) 현상이 발생합니다. 작업 완료 후 Signal/Slot을 통해 안전하게 GUI에 결과값이나 진행률을 전달합니다.

 

8. 개발 생산성 및 프로젝트 구조화

현업 수준의 유지보수 가능한 애플리케이션 개발을 위한 관리 기법입니다.

① Qt Designer 도구 체인

  • Qt Designer: 마우스 드래그 앤 드롭으로 UI 화면을 배치하고 .ui 파일로 저장하는 시각적 저작 도구.
  • pyside6-uic: 터미널 명령어를 통해 .ui 파일의 XML 구조를 Python 코드(.py)로 자동 변환하는 컴파일러.
  • objectName: 개발자가 Designer에서 지정한 위젯 고유의 이름으로, 파이썬 코드에서 self.ui.objectName 형태로 접근하여 로직을 연결

② 이상적인 프로젝트 폴더 구조 (구조화)

단일 파일 코딩의 한계를 극복하고, 파일별 역할을 분리하여 협업과 유지보수를 극대화

my_project/
├── main.py              # 앱 실행 및 QApplication 초기화 담당
├── widget.py            # 비즈니스 로직 및 이벤트(Slot) 바인딩 수행
├── ui_form.py           # Qt Designer에서 변환된 UI 클래스 파일 (.py)
├── config.json          # 창 크기, 테마 등 환경 설정 데이터
└── resources/           # 아이콘, 이미지, QSS 스타일시트 등 리소스 폴더