# -*- coding: utf-8 -*-
"""
Created on Thu May 1 18:53:22 2025
@author: user
"""
import tkinter as tk
# 固定的上班時間 8:00
START_TIME = 800
STANDARD_WORK_HOURS = 8 # 標準工作時數 8 小時
def calculate_overtime():
try:
# 取得下班時間
end_time = end_entry.get()
# 檢查格式:只接受四個數字(例如 1700 代表 17:00)
if len(end_time) != 3 and len(end_time) != 4 or not end_time.isdigit():
result_label.config(text="錯誤:時間格式錯誤,請使用 HHMM 格式")
return
# 轉換為數字
end_time = int(end_time)
# 計算實際工作時間(總分鐘)
start_hour = START_TIME // 100
start_minute = START_TIME % 100
end_hour = end_time // 100
end_minute = end_time % 100
# 計算上班時間的實際分鐘數
start_total_minutes = start_hour * 60 + start_minute
end_total_minutes = end_hour * 60 + end_minute
work_minutes = end_total_minutes - start_total_minutes - 60 # 減去1小時的休息時間
# 計算實際工作時數
actual_work_hours = work_minutes // 60
actual_work_minutes = work_minutes % 60
# 比較實際工作時間和標準 8 小時
if actual_work_hours < STANDARD_WORK_HOURS:
hours_to_deduct = STANDARD_WORK_HOURS - actual_work_hours
result_label.config(text=f"今天總共缺少 {hours_to_deduct} 小時工作!")
else:
overtime_hours = actual_work_hours - STANDARD_WORK_HOURS
result_label.config(text=f"加班 {overtime_hours} 小時 {actual_work_minutes} 分鐘")
except Exception as e:
result_label.config(text=f"錯誤:{str(e)}")
# 建立主視窗
window = tk.Tk()
window.title("加班時數計算器")
window.geometry("400x250") # 縮小視窗大小
window.resizable(False, False)
window.configure(bg="white")
# 標題 Label
title_label = tk.Label(
window,
text="加班時數計算",
font=("Arial", 30), # 調整字型大小
fg="blue",
bg="white"
)
title_label.pack(pady=15)
# 下班時間輸入欄位
end_label = tk.Label(window, text="請輸入下班時間 (例如 1700 代表 17:00)", font=("Arial", 12), bg="white")
end_label.pack(pady=5)
end_entry = tk.Entry(window, font=("Arial", 14), justify="center", width=6) # 縮小欄位寬度
end_entry.pack(pady=5)
# 計算按鈕
calc_button = tk.Button(
window,
text="計算",
font=("Arial", 14),
command=calculate_overtime,
bg="#4CAF50",
fg="white",
width=8
)
calc_button.pack(pady=10)
# 顯示結果的 Label
result_label = tk.Label(window, font=("Arial", 14), bg="white", fg="black", height=2, width=20, relief="solid")
result_label.pack(pady=10)
# 啟動 GUI 主事件迴圈
window.mainloop()