ㅇ 일 자 : 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 스타일시트 등 리소스 폴더
'IT 컴퓨터' 카테고리의 다른 글
| D+30 [아두이노] AI 시대 Arduino 기업에서 활용 어떻게 해? (0) | 2026.05.19 |
|---|---|
| D+6 [Python] 코딩 변환 (Python --> HTML) (0) | 2026.04.08 |