22import random
33from PIL import Image
44import sys
5+ import pstats
56
67import openpyxl as op
78import pandas as pd
1213import customtkinter as ctk
1314from winotify import Notification
1415from CTkMessagebox import CTkMessagebox
16+ import datetime
1517
1618from Package import *
1719
@@ -96,6 +98,9 @@ def _file_setup(self) -> None:
9698 self .data_manager .load_autobreak ()
9799 self .data_manager .save_eye_care ("Off" , "Off" )
98100
101+ self .data_manager .create_total_data ()
102+ self .create_achievements ()
103+
99104
100105 def initialize_variables (self ) -> None :
101106 self .statistics_scroll_position = "left"
@@ -239,7 +244,7 @@ def _progress_gui_setup(self) -> None:
239244 progress_label = ctk .CTkLabel (progress_frame , text = "Progress" , font = (font_family , int (font_size )), text_color = (light_font_color , font_color ))
240245 progress_label .place (anchor = "nw" , relx = 0.05 , rely = 0.05 )
241246
242- self .progressbar = ctk .CTkProgressBar (progress_frame , height = 20 , width = 220 , progress_color = button_color , fg_color = (light_border_frame_color , border_frame_color ), corner_radius = 10 )
247+ self .progressbar = ctk .CTkProgressBar (progress_frame , height = 20 , width = 220 , progress_color = ( light_border_frame_color , border_frame_color ) , fg_color = (light_border_frame_color , border_frame_color ), corner_radius = 10 )
243248 self .progressbar .place (anchor = "center" , relx = 0.5 , rely = 0.65 )
244249 self .progressbar .set (0 )
245250
@@ -695,8 +700,13 @@ def _my_format(pct):
695700
696701
697702 def create_total_time_graph (self , frame ):
698- dates = self .data_manager .date_list
699- times = self .data_manager .duration_list
703+ dates = self .data_manager .date_list .copy ()
704+ times = self .data_manager .duration_list .copy ()
705+
706+ if times :
707+ dates .insert (0 , (dates [0 ] - datetime .timedelta (days = 1 )))
708+ times .insert (0 , 0 )
709+
700710
701711 # Calculate cumulative time
702712 cumulative_times = [sum (times [:i + 1 ]) for i in range (len (times ))]
@@ -765,8 +775,8 @@ def create_graphs(self) -> None:
765775 self .create_funfact (0 , 5 , "Most Productive Day" , "" )
766776
767777 else :
768- self .create_funfact (0 , 0 , "Average Study Duration" , round (self .data_manager .total_duration / self .data_manager .data_amount , 1 ), "Minutes" )
769- self .create_funfact (0 , 1 , "Average Break Duration" , round (self .data_manager .total_break_duration / self .data_manager .data_amount , 1 ), "Minutes" )
778+ self .create_funfact (0 , 0 , "Average Study Duration" , round (self .data_manager .total_duration / self .data_manager .data_amount ), "Minutes" )
779+ self .create_funfact (0 , 1 , "Average Break Duration" , round (self .data_manager .total_break_duration / self .data_manager .data_amount ), "Minutes" )
770780 self .create_funfact (0 , 2 , "Average Study Start Time" , self .data_manager .average_time )
771781 self .create_funfact (0 , 4 , "Favorite Subject" , self .data_manager .most_common_subject , None , 3 )
772782 self .create_funfact (0 , 5 , "Most Productive Day" , self .data_manager .best_weekday , None , 2.7 )
@@ -859,7 +869,6 @@ def reset_gui_values(self) -> None:
859869 self .times_goal_reached .configure (text = 0 )
860870 self .streak_duration .configure (text = 0 )
861871 self .progressbar .set (0 )
862- self .progressbar .configure (progress_color = self .data_manager .color )
863872 self .reset_timers ()
864873
865874
@@ -948,7 +957,7 @@ def save_data(self) -> None:
948957 self .update_streak_values ()
949958 self .load_history ()
950959
951- self .data_manager . load_theme ()
960+ self .create_graphs ()
952961
953962 self .notification_limit_on = False
954963
@@ -1186,6 +1195,8 @@ def _get_widgets(frame):
11861195 if isinstance (widget , ctk .CTkButton ) or isinstance (widget , ctk .CTkProgressBar ):
11871196 if ".!ctkframe5" in str (widget ) and isinstance (widget , ctk .CTkButton ):
11881197 pass
1198+ elif ".!ctkframe2" in str (widget ) and isinstance (widget , ctk .CTkProgressBar ):
1199+ pass
11891200 else :
11901201 self .widget_list .append (widget )
11911202
@@ -1214,13 +1225,13 @@ def unlock_widgets(self):
12141225 self .frequency_input .delete ("end" )
12151226 self .duration_input .configure (state = "normal" )
12161227 self .duration_input .delete ("end" )
1217- self .autobreak_button .configure (state = "normal" , fg_color = button_color )
1218- self .break_button .configure (state = "normal" , fg_color = button_color , command = lambda : self .timer_manager .break_mechanism (self .break_button , self .timer_button , self .break_display_label ), hover = True )
1219- self .subject_button .configure (state = "normal" , fg_color = button_color )
1220- self .goal_button .configure (state = "normal" , fg_color = button_color )
1221- self .goal_dropdown .configure (state = "normal " )
1222- self .subject_selection .configure (state = "normal " )
1223- self .autobreak_switch .configure (state = "normal " )
1228+ self .autobreak_button .configure (state = "normal" , fg_color = self . data_manager . color )
1229+ self .break_button .configure (state = "normal" , fg_color = self . data_manager . color , command = lambda : self .timer_manager .break_mechanism (self .break_button , self .timer_button , self .break_display_label ), hover = True )
1230+ self .subject_button .configure (state = "normal" , fg_color = self . data_manager . color )
1231+ self .goal_button .configure (state = "normal" , fg_color = self . data_manager . color )
1232+ self .goal_dropdown .configure (state = "readonly " )
1233+ self .subject_selection .configure (state = "readonly " )
1234+ self .autobreak_switch .configure (state = "readonly " )
12241235
12251236
12261237 def save_on_quit (self ) -> None :
@@ -1229,21 +1240,24 @@ def save_on_quit(self) -> None:
12291240
12301241 self .workbook .save (self .data_file )
12311242
1232- self .WINDOW .destroy ()
1243+ self .WINDOW .quit ()
12331244
12341245
12351246 def change_focus (self , event ) -> None :
1236- event .widget .focus_set ()
1247+ try :
1248+ event .widget .focus_set ()
1249+ except AttributeError :
1250+ pass
12371251
12381252
12391253 def run (self ) -> None :
12401254 self .WINDOW .mainloop ()
12411255
1242-
1256+
12431257 def restart_program (self ) -> None :
12441258 python = sys .executable
12451259 os .execl (python , python , * sys .argv )
12461260
12471261
12481262if __name__ == "__main__" :
1249- App ().run ()
1263+ App ().run ()
0 commit comments