손을 흔들며 반갑게 웃는 파이인공지능 파이썬 실무
손을 흔들며 반갑게 웃는 파이

Ⅱ. GUI 프로그래밍 · 주제 08 / 10

통합 프로젝트 · 두 GUI, 하나의 기능 모듈

1단원의 패키지에 화면을 연결하여 앱을 완성합니다.

교과서 수행평가 연결쪽 + 확장예제 4개

대단원 Ⅱ. GUI 프로그래밍 교과서 40–59쪽

추가 실습 · 교과서 밖 확장

이 웹 주제의 연계 범위: 수행평가 연결쪽 + 확장

웹 학습 주제 08 / 10

통합 프로젝트 · 두 GUI, 하나의 기능 모듈

1단원의 패키지에 화면을 연결하여 앱을 완성합니다.

AT A GLANCE

기능에서 완성 앱까지

  1. 1요구 기능 정하기
  2. 2기능 모듈 구현
  3. 3입력과 오류 시험
  4. 4화면 연결·기록
산출물확인할 내용
기능 코드GUI 없이도 시험 가능
실행 결과정상·빈 값·경계값 비교
학습 기록오류 원인과 수정 근거

BEFORE THE CODE

코드 전에 알아 두기

새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.

기능 모듈from core.logic import roll, days_left, draw

화면 파일은 계산하지 않습니다. 같은 함수를 tkinter와 PySide6에서 부릅니다.

화면과 기능 분리

core에는 tkinter·PySide6가 없습니다. 웹에서 기능을 먼저 검사한 뒤 GUI를 붙입니다.

RESULT PREVIEW

실행하면 이렇게 보여요

생활 도우미 tkinter 실행 화면
화면은 입력과 표시만 하고 계산은 core에 맡깁니다. 이 예제를 Linux에서 실행해 캡처한 화면입니다. OS·테마에 따라 외형은 달라집니다.

같은 core.logic을 tkinter와 PySide6에서 임포트합니다. 각 GUI는 입력값을 읽어 함수에 전달하고 결과를 표시합니다. core에는 tkinter·PySide6 코드가 없으므로 웹에서도 기능을 검사할 수 있습니다.

기본 완성 조건: 위젯 배치, 버튼 이벤트, 모듈 분리, 잘못된 입력 안내입니다. 확장 과제: 추첨 인원 입력, 결과 기록, 설명 문구 개선 중 하나를 선택하세요. 두 버전 모두 실행하고 같은 입력의 의미가 유지되는지 비교합니다.

수행평가에서는 교사가 명시적으로 허용하지 않은 AI 도움 없이 스스로 작성해야 합니다. 저널에는 구현 내용, 오류, 해결 근거를 기록하고 코드와 함께 제출하세요.

한 버튼만 연결한 주사위 예제부터 시작하세요. 동작이 보이면 라디오·입력칸이 있는 생활 도우미로 옮깁니다. 빈 입력, 0면 주사위, 잘못된 날짜, 중복 이름은 기능 모듈이 예외를 내고 GUI는 메시지로 보여 줍니다.

직접 해 보세요

  1. 빈 입력, 0면 주사위, 잘못된 날짜, 중복 이름을 시험하세요.
  2. 프로젝트 ZIP과 학습 기록을 내려받아 선생님이 정한 경로로 제출하세요.

이 설명에 이어서 실습하기

예제를 선택하면 바로 아래에서 코드를 수정하고 실행할 수 있습니다. 작성한 코드는 예제별로 저장됩니다.

프로젝트 · 기능 모듈을 웹에서 검사

BEFORE THE CODE

코드 전에 알아 두기

새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.

rollroll(sides)

1부터 sides까지 정수 하나를 뽑습니다. 면 수가 1보다 작으면 ValueError입니다.

days_leftdays_left("2026-12-25", today)

목표 날짜까지 남은 일수를 정수로 반환합니다. 오늘을 빼면 검사하기 쉽습니다.

drawdraw(["민지", "수빈"], 2)

공백·중복을 정리한 뒤 count명을 뽑습니다. 인원이 부족하면 ValueError입니다.

반환과 출력

함수는 값을 return하고, print는 main에서 합니다. GUI는 이 반환값을 Label에 보여 줍니다.

기능 모듈 한 줄 연결 · 주사위 버튼

BEFORE THE CODE

코드 전에 알아 두기

새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.

from core.logic import rollfrom core.logic import roll

화면 파일은 계산을 직접 쓰지 않고 기능 모듈을 부릅니다. 웹의 core 예제와 같은 함수입니다.

command=showtk.Button(root, command=show)

클릭하면 show가 roll(6)을 호출하고 Label에 결과를 씁니다. GUI는 입력·표시만 담당합니다.

화면과 기능 분리

core에는 tkinter가 없습니다. 같은 roll을 PySide6 버튼에도 연결할 수 있습니다.

RESULT PREVIEW

실행하면 이렇게 보여요

기능 모듈 한 줄 연결 · 주사위 버튼
클릭하면 core.logic.roll 결과를 Label에 씁니다. 이 예제를 Linux에서 실행해 캡처한 화면입니다. OS·테마에 따라 외형은 달라집니다.

생활 도우미 · tkinter

BEFORE THE CODE

코드 전에 알아 두기

새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.

messagebox.showwarningmessagebox.showwarning("입력 확인", 메시지)

잘못된 입력을 창으로 알립니다. print만 하면 창을 보는 사용자는 모릅니다.

textvariableresult = tk.StringVar() tk.Label(root, textvariable=result)

Label이 변수를 구독합니다. result.set("글자")하면 화면이 바뀝니다. config(text=...)와 같은 목적입니다.

Entry.insertentry.insert(0, "6")

시작할 때 칸에 기본값을 넣습니다. 0은 맨 앞 위치입니다.

입력 확인

빈 칸·0면·잘못된 날짜는 core가 ValueError를 냅니다. GUI는 try/except로 메시지를 보여 줍니다.

RESULT PREVIEW

실행하면 이렇게 보여요

생활 도우미 · tkinter 라디오와 실행 버튼
같은 core.logic을 주사위·D-day·추첨에 연결합니다. 이 예제를 Linux에서 실행해 캡처한 화면입니다. OS·테마에 따라 외형은 달라집니다.

생활 도우미 · PySide6

BEFORE THE CODE

코드 전에 알아 두기

새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.

QComboBoxself.mode.addItems(["주사위", "D-day", "추첨"]) self.mode.currentText()

드롭다운으로 모드를 고릅니다. tkinter 라디오+StringVar를 한 위젯으로 대신합니다.

QMessageBox.warningQMessageBox.warning(self, "입력 확인", str(error))

messagebox.showwarning에 대응합니다. 첫 인자는 부모 창입니다.

클래스와 selfself.entry = QLineEdit("6")

run_task에서 같은 입력칸을 쓰려면 위젯을 self에 둡니다. 함수만 쓰면 이름이 사라집니다.

currentText

지금 고른 콤보 항목의 글자입니다. StringVar.get()에 대응합니다.

RESULT PREVIEW

실행하면 이렇게 보여요

생활 도우미 · PySide6 콤보 상자
모드만 바꾸고 같은 기능 모듈을 부릅니다. 이 예제를 Linux에서 실행해 캡처한 화면입니다. OS·테마에 따라 외형은 달라집니다.

CODE WORKSPACE

코드를 바꾸는 실습실

실행 환경

main.py

실행 엔진은 처음 실행할 때 내려받습니다. 패키지 크기에 따라 최초 준비에 최대 3분이 걸릴 수 있으며 네트워크가 필요합니다. 실행은 최대 30초이며 중지 후 다시 실행할 수 있습니다.

실행할 예제를 선택하세요.

PRACTICE / RETRY / UNDERSTAND

이 주제 연습 문제 2

이 주제와 연결된 문제만 보여 줍니다. 단원 전체 문제는 단원 안내 페이지에서 이어서 풀 수 있습니다.

단원 전체 70문제로 →