from core.logic import roll, days_left, draw화면 파일은 계산하지 않습니다. 같은 함수를 tkinter와 PySide6에서 부릅니다.
인공지능 파이썬 실무
Ⅱ. GUI 프로그래밍 · 주제 08 / 10
1단원의 패키지에 화면을 연결하여 앱을 완성합니다.
대단원 Ⅱ. GUI 프로그래밍 교과서 40–59쪽
추가 실습 · 교과서 밖 확장
이 웹 주제의 연계 범위: 수행평가 연결쪽 + 확장
웹 학습 주제 08 / 10
1단원의 패키지에 화면을 연결하여 앱을 완성합니다.
| 산출물 | 확인할 내용 |
|---|---|
| 기능 코드 | GUI 없이도 시험 가능 |
| 실행 결과 | 정상·빈 값·경계값 비교 |
| 학습 기록 | 오류 원인과 수정 근거 |
BEFORE THE CODE
새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.
from core.logic import roll, days_left, draw화면 파일은 계산하지 않습니다. 같은 함수를 tkinter와 PySide6에서 부릅니다.
core에는 tkinter·PySide6가 없습니다. 웹에서 기능을 먼저 검사한 뒤 GUI를 붙입니다.
RESULT PREVIEW
같은 core.logic을 tkinter와 PySide6에서 임포트합니다. 각 GUI는 입력값을 읽어 함수에 전달하고 결과를 표시합니다. core에는 tkinter·PySide6 코드가 없으므로 웹에서도 기능을 검사할 수 있습니다.
기본 완성 조건: 위젯 배치, 버튼 이벤트, 모듈 분리, 잘못된 입력 안내입니다. 확장 과제: 추첨 인원 입력, 결과 기록, 설명 문구 개선 중 하나를 선택하세요. 두 버전 모두 실행하고 같은 입력의 의미가 유지되는지 비교합니다.
수행평가에서는 교사가 명시적으로 허용하지 않은 AI 도움 없이 스스로 작성해야 합니다. 저널에는 구현 내용, 오류, 해결 근거를 기록하고 코드와 함께 제출하세요.
한 버튼만 연결한 주사위 예제부터 시작하세요. 동작이 보이면 라디오·입력칸이 있는 생활 도우미로 옮깁니다. 빈 입력, 0면 주사위, 잘못된 날짜, 중복 이름은 기능 모듈이 예외를 내고 GUI는 메시지로 보여 줍니다.
예제를 선택하면 바로 아래에서 코드를 수정하고 실행할 수 있습니다. 작성한 코드는 예제별로 저장됩니다.
BEFORE THE CODE
새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.
roll(sides)1부터 sides까지 정수 하나를 뽑습니다. 면 수가 1보다 작으면 ValueError입니다.
days_left("2026-12-25", today)목표 날짜까지 남은 일수를 정수로 반환합니다. 오늘을 빼면 검사하기 쉽습니다.
draw(["민지", "수빈"], 2)공백·중복을 정리한 뒤 count명을 뽑습니다. 인원이 부족하면 ValueError입니다.
함수는 값을 return하고, print는 main에서 합니다. GUI는 이 반환값을 Label에 보여 줍니다.
BEFORE THE CODE
새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.
from core.logic import roll화면 파일은 계산을 직접 쓰지 않고 기능 모듈을 부릅니다. 웹의 core 예제와 같은 함수입니다.
tk.Button(root, command=show)클릭하면 show가 roll(6)을 호출하고 Label에 결과를 씁니다. GUI는 입력·표시만 담당합니다.
core에는 tkinter가 없습니다. 같은 roll을 PySide6 버튼에도 연결할 수 있습니다.
RESULT PREVIEW
BEFORE THE CODE
새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.
messagebox.showwarning("입력 확인", 메시지)잘못된 입력을 창으로 알립니다. print만 하면 창을 보는 사용자는 모릅니다.
result = tk.StringVar()
tk.Label(root, textvariable=result)Label이 변수를 구독합니다. result.set("글자")하면 화면이 바뀝니다. config(text=...)와 같은 목적입니다.
entry.insert(0, "6")시작할 때 칸에 기본값을 넣습니다. 0은 맨 앞 위치입니다.
빈 칸·0면·잘못된 날짜는 core가 ValueError를 냅니다. GUI는 try/except로 메시지를 보여 줍니다.
RESULT PREVIEW
BEFORE THE CODE
새 이름·속성이 코드에 나오기 전에 짧게 봅니다. 외우기보다 역할을 먼저 구별하세요.
self.mode.addItems(["주사위", "D-day", "추첨"])
self.mode.currentText()드롭다운으로 모드를 고릅니다. tkinter 라디오+StringVar를 한 위젯으로 대신합니다.
QMessageBox.warning(self, "입력 확인", str(error))messagebox.showwarning에 대응합니다. 첫 인자는 부모 창입니다.
self.entry = QLineEdit("6")run_task에서 같은 입력칸을 쓰려면 위젯을 self에 둡니다. 함수만 쓰면 이름이 사라집니다.
지금 고른 콤보 항목의 글자입니다. StringVar.get()에 대응합니다.
RESULT PREVIEW
CODE WORKSPACE
실행 엔진은 처음 실행할 때 내려받습니다. 패키지 크기에 따라 최초 준비에 최대 3분이 걸릴 수 있으며 네트워크가 필요합니다. 실행은 최대 30초이며 중지 후 다시 실행할 수 있습니다.
실행할 예제를 선택하세요.
PRACTICE / RETRY / UNDERSTAND
이 주제와 연결된 문제만 보여 줍니다. 단원 전체 문제는 단원 안내 페이지에서 이어서 풀 수 있습니다.