모듈 3-A⏱️ 예상 소요 시간: 40분📊 난이도: 중급

모듈 3-A: Python 기반 데스크톱 어플리케이션 개발 & 빌드

PyQt6 / CustomTkinter를 활용한 윈도우 GUI 앱 개발 및 .exe 파일 빌드

🎯 학습 목표 및 개요

Python 언어와 PyQt6/CustomTkinter GUI 라이브러리를 활용하여 윈도우 데스크톱용 프로그램(이미지 포맷 변환기 또는 스마트 메모장)을 제작하고 독립 실행파일(.exe)로 빌드합니다.

✅ Python GUI 코드 생성 -> 파이썬 실행 환경 테스트 -> PyInstaller를 통한 .exe 생성 및 실행 검증
1

PyQt6 이미지 변환기 GUI 코드 프롬프트 작성

드래그 앤 드롭과 이미지 포맷 변환 기능이 있는 윈도우 앱 제작 지시서입니다.

클로드_입력_프롬프트.txttext
1당신은 Python GUI 소프트웨어 엔지니어입니다. PyQt6를 활용하여 "배치 이미지 포맷 변환기(PNG/JPG/WEBP)" 윈도우 데스크톱 앱을 만들어주세요.
2
3[필수 기능]
41. 이미지 파일 여러 개 선택 버튼 및 리스트박스
52. 변환할 목표 포맷 선택 (PNG, JPG, WEBP, GIF)
63. 변환 시작 버튼 및 변환 진행률(ProgressBar) 표시
74. 변환 완료 시 저장 폴더 자동 열기 기능 (os.startfile)
85. 현대적이고 깔끔한 파스텔톤 다크 테마 QSS 스타일시트 적용
9
10단일 파일 (app.py)로 실행 가능하도록 작성해 주세요.
복사 버튼을 누른 후 claude.ai 입력창에 그대로 붙여넣으세요.
app.pypython
1import sys, os
2from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
3 QPushButton, QFileDialog, QComboBox, QProgressBar, QLabel, QListWidget)
4from PIL import Image
5
6class ImageConverterApp(QMainWindow):
7 def __init__(self):
8 super().__init__()
9 self.setWindowTitle("클로드 AI - 이미지 포맷 변환기")
10 self.setGeometry(100, 100, 500, 400)
11 self.files = []
12 self.initUI()
13
14 def initUI(self):
15 central_widget = QWidget()
16 self.setCentralWidget(central_widget)
17 layout = QVBoxLayout()
18
19 self.label = QLabel("변환할 이미지 파일을 선택하세요")
20 layout.addWidget(self.label)
21
22 self.btn_select = QPushButton("파일 선택")
23 self.btn_select.clicked.connect(self.select_files)
24 layout.addWidget(self.btn_select)
25
26 self.list_widget = QListWidget()
27 layout.addWidget(self.list_widget)
28
29 self.combo = QComboBox()
30 self.combo.addItems(["PNG", "JPEG", "WEBP"])
31 layout.addWidget(self.combo)
32
33 self.progress = QProgressBar()
34 layout.addWidget(self.progress)
35
36 self.btn_convert = QPushButton("변환 시작")
37 self.btn_convert.clicked.connect(self.convert_images)
38 layout.addWidget(self.btn_convert)
39
40 central_widget.setLayout(layout)
41
42 def select_files(self):
43 files, _ = QFileDialog.getOpenFileNames(self, "이미지 선택", "", "Images (*.png *.jpg *.jpeg *.webp)")
44 if files:
45 self.files = files
46 self.list_widget.clear()
47 self.list_widget.addItems([os.path.basename(f) for f in files])
48
49 def convert_images(self):
50 if not self.files: return
51 target_fmt = self.combo.currentText().lower()
52 out_dir = os.path.join(os.path.expanduser("~"), "Desktop", "Converted_Images")
53 os.makedirs(out_dir, exist_ok=True)
54
55 for i, file_path in enumerate(self.files):
56 img = Image.open(file_path)
57 base_name = os.path.splitext(os.path.basename(file_path))[0]
58 save_path = os.path.join(out_dir, f"{base_name}.{target_fmt}")
59 if target_fmt == "jpeg": img = img.convert("RGB")
60 img.save(save_path)
61 self.progress.setValue(int(((i + 1) / len(self.files)) * 100))
62
63 os.startfile(out_dir)
64
65if __name__ == '__main__':
66 app = QApplication(sys.argv)
67 ex = ImageConverterApp()
68 ex.show()
69 sys.exit(app.exec())
Python PyQt6와 Pillow 라이브러리를 활용한 변환기 풀 코드
📸 실습 스크린샷 가이드라인
16:9

윈도우 OS상에서 창으로 열린 이미지 포맷 변환기 GUI 화면

[이미지 영역: 1920x1080 (16:9)]

🎯 스크린샷 필수 포함 요소:
윈도우 상단 타이틀바파일 선택 리스트프로그래스바 및 변환 버튼
2

PyInstaller를 통한 .exe 파일 패키징 및 실행 파일 빌드

파이썬이 설치되지 않은 다른 컴퓨터에서도 작동할 수 있도록 단일 .exe 실행파일로 포장합니다.

클로드_입력_프롬프트.txttext
1pip install pyinstaller PyQt6 Pillow
2pyinstaller --noconsole --onefile app.py
복사 버튼을 누른 후 claude.ai 입력창에 그대로 붙여넣으세요.

💡 .exe 파일 생성 위치

PyInstaller 명령어를 실행하면 프로젝트 폴더 안의 `dist` 폴더 내부에 `app.exe` 단일 실행 파일이 생깁니다.

📸 실습 스크린샷 가이드라인
16:9

터미널에서 빌드 완료 로그 및 윈도우 탐색기의 dist/app.exe 파일 모습

[이미지 영역: 1920x1080 (16:9)]

🎯 스크린샷 필수 포함 요소:
터미널 Successful 빌드 문구탐색기 dist 폴더 경로app.exe 실행 파일 아이콘

🧠 모듈 이해도 점검 퀴즈 (Knowledge Check)

이번 모듈에서 학습한 핵심 개념을 잘 이해했는지 테스트해보세요.

1. PyInstaller 사용 시 `--noconsole --onefile` 옵션의 역할은 무엇인가요?