지금까지 만들었던 기능은 최대 24시간 내 실행 시간 예약이 가능하도록 구현되었다 ( 날짜 지정 기능이 없으므로 )
추가적으로, 특정 일자에 실행을 예약하고 싶다는 니즈를 확인하여 실행되는 날짜까지 지정할 수 있도록 기능을 추가하였다.
날짜를 지정하기 위해 다양한 방법을 선택할 수 있겠지만, 다른 UI 구성을 tkinter 로 구성했으므로
동일한 패키지에서 제공하는 달력 UI를 사용하기 위해 tkcalendar 를 설치하였다.
pip install tkcalendar
설치가 완료되면, 기존에 있던 코드에 달력 UI를 추가시키기 위한 작업을 진행하자.
from tkcalendar import DateEntry
# 이하 이전 코드들
calendar = DateEntry(window, width=200)
calendar.pack(padx=20, pady=10)
간단하게 기존 프로그램 UI에 달력 추가가 가능하다.
이제 추가적으로 수정해야 할 곳은 현재 날짜와 시간과 예약 날짜와 시간을 비교하며 실행 여부를 판단하는 함수 부분이다.
이전에는 시간까지만 확인했다면, 현재는 날짜까지 고려해서 실행 여부를 결정해야 한다.
def clock_update():
# 달력의 날짜 반환
year, month, day = map(int, str(calendar.get_date()).split('-'))
# 예약된 시간 반환
hour, minute = time_picker.hours(), time_picker.minutes()
# 날짜형으로 변경
reserve_time = datetime.datetime(year, month, day, hour, minute, 0)
# 남은 시간 반환
remain_time = str(reserve_time - datetime.datetime.now()).split('.')[0].replace("days,", "일")
now = datetime.datetime.now()
current_time = time.strftime("%H:%M:%S")
clock_label.config(text = "현재 시간 : {}".format(current_time))
status_label.config(text = "{} 후 실행 예정".format(remain_time))
if day == now.day and hour == now.hour and minute == now.minute:
# 함수 실행 부분
return window.quit()
window.after(1000, clock_update)
tkinter로 불러온 2가지 정보 (날짜, 시간)를 datetime으로 변환해서 실행 예약된 시간을 datetime 타입으로 변환한다.
그 후, 현재 시간과의 차이를 비교해 언제 실행이 예정되어있는지 확인할 수 있도록 구현했다.
(프로그램 실행자가 오류 여부를 확인할 수 있도록 설계)
그 후, 현재 시간 정보가 예약된 시간 정보와 분 단위까지 일치하게 된다면, 기능을 실행하도록 구현했다.
정상 작동을 확인했으니, 이제 pyinstaller 로 해당 파일을 exe로 변환하여 요청자에게 보내주었다.
'Backend > Python' 카테고리의 다른 글
[FastAPI] Project Levup - 회원가입과 로그인 기능 만들기 (0) | 2023.11.16 |
---|---|
[FastAPI] Project Levup - 시작하기 (0) | 2023.11.14 |
[Python] tkinter - 예약 타이머 만들기 - 기능 추가 (0) | 2023.11.10 |
[Python] tkinter - 예약 타이머 만들기 - UI 구성 (1) | 2023.11.09 |
[Python] Flask 배포와 개발 환경 pip freeze (0) | 2023.04.01 |