이전 글에서 UI를 구성했으므로, 예약한 시간에 맞춰 다른 프로그램이 실행될 수 있도록
현재 시간과 예약 시간을 확인하고, 실행 여부를 판단하는 로직을 추가했다.
1. 현재 시간과 예약 시간 확인하기
import tkinter, time, datetime, sys
from tktimepicker import AnalogPicker, constants
from tkinter import filedialog, messagebox
file = filedialog.askopenfilenames(initialdir="/", title="파일명 선택")
if not file:
messagebox.showwarning("오류", "파일을 선택하세요")
sys.exit()
window = tkinter.Tk()
window.title("Crawler")
window.geometry("300x550")
def clock_update():
reserve_hour, reserve_minute = time_picker.hours(), time_picker.minutes() # 세팅된 시간, 분 확인
now = datetime.datetime.now() # 현재 시간 확인
current_time = time.strftime("%H:%M:%S")
clock_label.config(text = "현재 시간 : {}".format(current_time))
window.after(1000, clock_update)
# 파일명 표기
file_name = tkinter.Label(window, text=file)
file_name.pack(padx=20)
# 현재 시간
clock_label = tkinter.Label(window, text="")
clock_label.pack(pady=10)
# 진행 상황 표기 줄
status_label = tkinter.Label(window, text="시작 대기 중")
status_label.pack(padx=20, pady=10)
# 예약 시간
time_picker = AnalogPicker(window, period=constants.PM) # 오후로 시간 고정
time_picker.setHours(datetime.datetime.now().hour % 12) # 12시간 표기법으로 변환, 고정
time_picker.setMinutes(datetime.datetime.now().minute) 현재 시간의 분으로 고정
time_picker.pack(padx=20)
# 버튼 Method
button = tkinter.Button(window, command=clock_update, text="시작하기", width=200, height=10)
button.pack(padx=20, pady=25)
window.mainloop()
프로그램 실행 시 현 시간을 기준으로 오후 시간대로 세팅하기 위해 time_picker Method 를 사용하여
시간, 분, 오후로 맞춰두었으며, 버튼 클릭 시 clock_update 함수가 실행되므로 클릭 시 clock_update 함수 안에 세팅 시간을 확인하도록
함수 안 로직을 추가하였다.
2. 현재 시간과 비교하여 실행 타이밍 맞추기
def clock_update():
reserve_hour, reserve_minute = time_picker.hours(), time_picker.minutes()
# 실행 시간대가 PM이면 현재 시간에서 +12 시간
if time_picker.period() == "PM":
reserve_hour += 12
now = datetime.datetime.now()
current_time = time.strftime("%H:%M:%S")
clock_label.config(text = "현재 시간 : {}".format(current_time))
# 실행 시간까지 얼마나 걸리는지 알림
status_label.config(text = "{} 시간 {} 분 후 실행 예정".format(
reserve_hour - now.hour, reserve_minute - now.minute
))
# 시간이 맞는 경우, 예약 함수 시작
if reserve_hour == now.hour and reserve_minute == now.minute:
print("start!")
return sys.exit()
window.after(1000, clock_update)
datetime.datetime.now()로 현재 시간을 불러와, 시간을 추출하는 경우 12시간 표기법이 아닌, 24시간 표기법으로 반환하므로
예약된 실행대가 오후일 경우에는 세팅된 시간에 12시간을 더해줘, 원하는 시간에 함수가 실행되지 않을 불상사를 막는다.
예약 시간을 초 단위로 맞추지 않는 이유는 다들 아시겠지만, 실행 주기인 1000ms 이 반드시 1초를 보장하지 않으므로
실행할 수 있는 기회를 여유롭게 주기 위해서 시간과 분이 맞기만 하면 실행하도록 구성하였다.
위 코드 상, 예약 시간에 맞춰 start!를 터미널에 출력하고, 그 후 프로그램은 종료되도록 설계했다.
저의 경우, 실제로는 다른 파일에 있는 함수가 실행될 예정이지만, 위 코드를 참고하시는 분들은 print("start!") 라인에
실행하고자 하는 함수를 넣어주면 된다.
'Backend > Python' 카테고리의 다른 글
[FastAPI] Project Levup - 시작하기 (0) | 2023.11.14 |
---|---|
[Python] tkinter - 예약 타이머 만들기 - 기능 추가 2 (1) | 2023.11.14 |
[Python] tkinter - 예약 타이머 만들기 - UI 구성 (1) | 2023.11.09 |
[Python] Flask 배포와 개발 환경 pip freeze (0) | 2023.04.01 |
[python] Selenium & Bs4 웹 스크래핑 (0) | 2023.03.22 |