# -*- 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()