## 🖼️ PyQt, 질문하며 배우기

파이썬 GUI · 선행: 파이썬 · 로컬에서 실행 (PyQt5/6 + 아나콘다 또는 pip)

## 수업 진행

🤖

### 질문

교안 프롬프트를 LLM에 복사

💻

### 실행

PyCharm / VS Code에서 GUI 실행

👩‍🏫

### 리뷰

구글 미트에서 구조·이벤트 정리

GUI는 브라우저에서 실행되지 않습니다. 코드를 복사해 로컬에서 돌리세요.
앞: 위젯·이벤트·레이아웃 · 뒤: Designer·배포·크롤링 연동 프로젝트

### 1-1. 환경 · 아나콘다

🤖 AI에게 물어보자

    Windows에서 Anaconda 설치 후 PyQt5를 쓰는 방법, pip install PyQt5 와의 차이, ImportError: DLL load failed 가 날 때 PATH에 넣어야 할 폴더를 설명해줘.

#### 체크

- Anaconda3, Anaconda3\Scripts, Anaconda3\Library\bin 을 PATH에
- `pip install PyQt5` 또는 conda로 설치

### 1-2. Hello World

🤖 AI에게 물어보자

    PyQt5로 QApplication, QLabel을 써서 Hello World 창을 띄우는 최소 코드를 보여줘. app.exec_() 가 이벤트 루프라는 것도 설명해줘.

    import sys
    from PyQt5.QtWidgets import QApplication, QLabel

    app = QApplication(sys.argv)
    label = QLabel('Hello World!')
    label.show()
    app.exec_()

👩‍🏫 선생님 리뷰

1. QApplication이 먼저 있어야 위젯이 동작합니다
2. exec_()는 이벤트 루프 — 창이 닫힐 때까지 대기

### 1-3. 이벤트 처리 (시그널·슬롯)

🤖 AI에게 물어보자

    PyQt5 QPushButton 클릭 시 콘솔에 메시지를 출력하는 예제와 clicked.connect 시그널-슬롯을 설명해줘.

    import sys
    from PyQt5.QtWidgets import QApplication, QPushButton

    def on_click():
        print('버튼 클릭!')

    app = QApplication(sys.argv)
    btn = QPushButton('눌러보세요')
    btn.clicked.connect(on_click)
    btn.show()
    app.exec_()

### 1-4. 윈도우 (QMainWindow / QWidget)

🤖 AI에게 물어보자

    QWidget을 상속한 커스텀 윈도우 클래스 예제(제목, 크기 설정)를 보여줘. closeEvent 재정의로 종료 전 확인하는 방법도 알려줘.

### 1-5. 실습 — 두 개의 윈도우 제어

🤖 AI에게 물어보자

    PyQt5에서 메인 창 버튼으로 두 번째 창을 열고 닫는 예제 코드를 짜줘.

### 1-6. 위젯

QLabel, QLineEdit, QTextEdit, QComboBox, QCheckBox, QRadioButton, QTableWidget … AI에게 “로그인 폼에 필요한 위젯 조합 예제”를 물어보세요.

### 1-7. 레이아웃

🤖 AI에게 물어보자

    PyQt5 VBoxLayout, HBoxLayout, GridLayout 차이를 예제와 함께 설명해줘. 절대 좌표 setGeometry와 레이아웃의 장단점도 비교해줘.

### 1-8. 다이얼로그

🤖 AI에게 물어보자

    QMessageBox, QFileDialog, QInputDialog 사용 예제를 각각 짧게 보여줘.

### 1-9. Qt Designer 고급

🤖 AI에게 물어보자

    Qt Designer로 만든 .ui 파일을 PyQt5에서 loadUi 또는 uic.loadUiType으로 불러오는 방법을 단계별로 알려줘.

코드로만 짜는 것(기초) → Designer로 UI 분리(고급) 순서입니다.

### 1-10. pip · pyinstaller 배포 고급

    pip install pyinstaller
    pyinstaller -w -F myapp.py
    # -w: 콘솔 숨김, -F: 단일 exe

### 2-1. 실습 — 파일 다이얼로그

🤖 AI에게 물어보자

    PyQt5에서 버튼 클릭 시 QFileDialog로 텍스트 파일을 고르고, 내용을 QTextEdit에 표시하는 프로그램을 짜줘. 창 제목과 아이콘도 설정해줘.

### 2-2. 네이버 블로그 검색 GUI

🤖 AI에게 물어보자

    네이버 검색 API(블로그)를 호출하는 파이썬 예제와, 검색어 입력창·결과 리스트를 가진 PyQt5 GUI 구조를 제안해줘. API 키는 환경변수로 읽는다고 가정해.

API 문서: developers.naver.com · Client ID/Secret 필요

### 2-3. 뉴스 수집 GUI

🤖 AI에게 물어보자

    네이버 뉴스 목록 URL의 sid1 카테고리 규칙을 이용해, 카테고리 콤보박스와 수집 버튼이 있는 PyQt GUI 설계를 제안해줘. 실제 파싱은 requests+bs4로 한다고 가정.

### 2-4. 4대질병 데이터 GUI

🤖 AI에게 물어보자

    지역·날짜·질병을 입력받아 CSV/리스트 데이터에서 조회 결과를 테이블로 보여주는 PyQt5 프로그램 구조를 제안해줘. 조회 로직은 별도 함수로 분리해.

데이터 파일은 선생님이 제공한 zip을 프로젝트 폴더에 두고 사용합니다.