본문 바로가기
Backend/Python

[Python] tkinter - 예약 타이머 만들기 - 기능 추가 2

by 천우산__ 2023. 11. 14.

지금까지 만들었던 기능은 최대 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로 변환하여 요청자에게 보내주었다.