아래 코드를 함수별로 설명해줘 import tkinter as tk #Tkinter 모듈을 가져와 GUI를 생성합니다. from tkinter import messagebox # 메시지 박스를 사용하기 위해 가져옵니다. import datetime # 날짜와 시간을 다루기 위해 가져옵니다. import os # 운영체제와 상호작용하기 위해 가져옵니다. import webbrowser # 웹사이트를 열기 위해 가져옵니다. 요일 매핑 (일요일 = 0, 월요일 = 1, 토요일 = ..." 6) = { day_mapping '일요일': 0, '월요일': 1, '화요일': 2, '수요일': 3, '토요일': 6 '목요일': 4, '금요일': 5, } 알림 데이터 저장 (딕셔너리) {} notifications = # 데이터 불러오기 함수 def load_data(): """저장된 알림 데이터를 파일에서 불러오는 함수."" || try: with open("notifications.txt", "r") as file: # 파일을 읽기 모드로 엽니다. for line in file: day_time = line.strip() notifications[day_time] # 각 줄에서 불필요한 공백을 제거합니다. = True #알림만 추가 (링크 정보 없이) except FileNotFoundError: # 파일이 없을 경우 예외 처리 pass # 아무것도 하지 않고 종료합니다. # 데이터 저장 함수 def save_data(): """알림 데이터를 파일에 저장하는 함수. ||_||_|| with open("notifications.txt", "w") as file: # 파일을 쓰기 모드로 엽니다. for day_time in notifications.keys(): file.write(f"{day_time}\n") # 각 알림을 파일에 저장합니다. # 알림 및 링크 열기 함수 def check_notifications(): ""현재 시간에 맞는 알림을 확인하고 처리하는 함수.""" now = datetime.datetime.now() # 현재 날짜와 시간을 가져옵니다. current_day = now.strftime('%A') # 현재 요일을 영어로 가져옵니다. current_time = now.strftime('%H:%M') # 현재 요일 숫자 가져오기 (월요일=0, current_day_num = # 현재 시간을 'HH:MM' 형식으로 가져옵니다. ...9 일요일=6) (now.weekday() + 1) 응 7 # weekday()는 월요일=0, 일요일=6 # 등록된 알림 목록을 확인합니다. for day_time in list(notifications.keys()): notification_day, notification_time = day_time.split() # 알림에서 요일과 시간을 분리합니다. notification_day_num = day_mapping[notification_day] # 한글 요일을 숫자로 변환 notification_dt = datetime.datetime.strptime(notification_time, '%H:%M') # 시간 문자열을 datetime 객체로 변환합니다. reminder_dt 다. = notification_dt - datetime.timedelta(minutes=10) #알림 시간을 10분 전으로 설정합니 # 현재 요일과 알림 요일을 비교합니다. if current_day_num # 10분 전 알림 == notification_day_num: if current_time == reminder_dt.strftime('%H:%M'): messagebox.showinfo("Reminder", "수업시작 10분 전입니다. 전자출결을 진행하세요.") # 지정한 시간에 링크 열기 elif current_time == notification_dt.strftime('%H:%M'): webbrowser.open("https://icampus.skku.edu/") # 첫 번째 링크 열기 webbrowser.open("https://kingoinfo.skku.edu/") # 두 번째 링크 열기 # 다음 주로 재설정 next_week = now + datetime.timedelta(weeks=1) # 현재 시간에 1주일을 더합니다. new_day_time f"{notification_day} {notification_time}" # 다음 주 요일 유지 notifications[new_day_time] = True # 새로운 알림 추가 = del notifications[day_time] # 기존 알림 삭제 save_data( ) # 변경 사항 저장 root.after(60000, check_notifications) # 60초 후에 다시 확인합니다. # 알림 추가 함수 def add_notification(): '""알림을 추가하는 함수. day_time = day_time_entry.get() # 입력 필드에서 텍스트 가져오기 if day_time: # 입력값이 비어있지 않은 경우만 추가 else: notifications[day_time] save_data() # 데이터 저장 = True # 알림 추가 update_listbox() # 리스트박스 업데이트 messagebox.showwarning("알림", "요일과 시간을 입력해주세요.") #경고 메시지 #알림 삭제 함수 def delete_notification(): |||||| "선택된 알림을 삭제하는 함수.""" selected = if selected: else: listbox.get(tk.ACTIVE) # 리스트박스에서 선택된 항목 가져오기 day_time = selected.split(' - ')[0] # 리스트박스 항목에서 키 추출 if day_time in notifications: del notifications[day_time] # 알림 삭제 save_data() # 데이터 저장 update_listbox() # 리스트박스 업데이트 # 알림이 모두 삭제된 경우 else: if not notifications: messagebox.showinfo("알림", "데이터가 다 삭제되어 기능을 종료합니다.") # 종료 메시지 root.quit() # 프로그램 종료 || messagebox.showwarning("알림" "선택된 알림이 존재하지 않습니다.") #경고 메시지 messagebox.showwarning("알림", "삭제할 알림이 없습니다.") # 경고 메시지 # Listbox 업데이트 함수 def update_listbox( ): """리스트박스를 업데이트하는 함수. |||||| listbox.delete(0, tk.END) # 리스트박스 초기화 for day_time in notifications.keys(): listbox.insert(tk.END, day_time) # 알림 추가 # UI 설정 root= tk.Tk() # Tkinter 객체 생성 root.title("알림 스케줄러") #창 제목 설정 # 입력 필드와 레이블 생성 tk.Label(root, text="요일과 시간 (예: 월요일 16:50):").grid(row=0, column=0) #레이블 추가 day_time_entry = tk.Entry(root) # 입력 필드 생성 day_time_entry.grid(row=0, column=1) # 그리드에 배치 # 버튼 생성 및 배치 add_button = tk.Button(root, text="추가", command=add_notification) # 추가 버튼 add_button.grid(row=2, column=0) #그리드에 배치 delete_button = tk.Button(root, text="삭제", command=delete_notification) #삭제 버튼 delete_button.grid(row=2, column=1) # 그리드에 배치 # 리스트박스 생성 listbox = tk.Listbox(root, width=50) # 리스트박스 생성 listbox.grid(row=3, column=0, columnspan=2) # 그리드에 배치 # 데이터 불러오기 및 초기화 load_data( ) # 데이터 불러오기 update_listbox() #리스트박스 업데이트 root.after(60000, check_notifications) # 첫 알림 체크 시작 root.mainloop() # Tkinter 메인 루프 시작 | 물어봐 AI