Skip to content

Commit d235099

Browse files
committed
Minor Changes
Minor UI updates, bug fixes and optimizations
1 parent e992e87 commit d235099

3 files changed

Lines changed: 64 additions & 24 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11

22
test.py
33
*.pyc
4+
*.prof

Package/data_management.py

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from collections import Counter
22
import os
3+
import cProfile
34

45
import datetime
56
import openpyxl as op
@@ -19,9 +20,20 @@ def __init__(self, App, timer_manager, workbook, worksheet):
1920
self.workbook = workbook
2021
self.worksheet = worksheet
2122
self.initialize_variables()
23+
self._initialize_once()
2224

2325
self.notes_manager = NotesManager(self.app, self)
2426

27+
28+
def _initialize_once(self) -> None:
29+
self.theme_changed = True
30+
self.color_changed = True
31+
self.graph_color = "#f38064"
32+
self.graph_bg_color = graph_bg_color
33+
self.graph_fg_color = graph_fg_color
34+
self.font_color = font_color
35+
self.spine_color = border_frame_color
36+
2537

2638
def initialize_variables(self) -> None:
2739
self.day_name_list = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
@@ -31,11 +43,6 @@ def initialize_variables(self) -> None:
3143
self.total_break_duration = 0
3244
self.best_weekday = ""
3345
self.average_time = "00:00"
34-
self.graph_color = "#f38064"
35-
self.graph_bg_color = graph_bg_color
36-
self.graph_fg_color = graph_fg_color
37-
self.font_color = font_color
38-
self.spine_color = border_frame_color
3946

4047

4148
def initialize_new_file_variables(self) -> None:
@@ -328,9 +335,12 @@ def load_autobreak(self):
328335

329336

330337
def set_color(self, color_dropdown) -> None:
338+
self.color_changed = True
331339
self.color_name = color_dropdown.get()
332340
if self.color_name != self.worksheet["T2"].value:
341+
333342
print("Color set.")
343+
334344
self.save_color()
335345

336346

@@ -342,6 +352,10 @@ def save_color(self) -> None:
342352
def load_color(self) -> None:
343353
self.color_name = self.worksheet["T2"].value
344354
self.app.color_dropdown.configure(variable=ctk.StringVar(value=self.color_name))
355+
356+
if self.color_changed == False:
357+
return
358+
345359
colors = {"Orange": [orange_button_color, orange_highlight_color, orange_pie_colors],
346360
"Green": [green_button_color, green_highlight_color, green_pie_colors],
347361
"Blue": [blue_button_color, blue_highlight_color, blue_pie_colors],
@@ -352,8 +366,11 @@ def load_color(self) -> None:
352366
self.pie_colors = colors[self.color_name][2]
353367
self.graph_color = self.color
354368
print("Color loaded.")
369+
355370
self.change_color()
356371

372+
self.color_changed = False
373+
357374

358375
def change_color(self) -> None:
359376
for widget in self.app.widget_list:
@@ -364,8 +381,10 @@ def change_color(self) -> None:
364381
widget.configure(progress_color = self.color)
365382
else:
366383
widget.configure(progress_color=(light_border_frame_color, border_frame_color))
367-
#self.app.progressbar.configure(progress_color = self.color)
384+
368385
self.app.eye_care_checkbox.configure(fg_color=self.color)
386+
if self.app.progressbar.get() != 0:
387+
self.app.progressbar.configure(progress_color = self.color)
369388
self.app.create_graphs()
370389

371390
self.app.create_achievements()
@@ -375,6 +394,7 @@ def change_color(self) -> None:
375394

376395

377396
def set_theme(self, theme_dropdown) -> None:
397+
self.theme_changed = True
378398
self.theme_name = theme_dropdown.get()
379399
if self.theme_name != self.worksheet["U2"].value:
380400
print("Theme set.")
@@ -390,6 +410,9 @@ def load_theme(self) -> None:
390410
self.theme_name = self.worksheet["U2"].value
391411
self.app.theme_dropdown.configure(variable=ctk.StringVar(value=self.theme_name))
392412

413+
if self.theme_changed == False:
414+
return
415+
393416
if self.theme_name == "Dark":
394417
ctk.set_appearance_mode("dark")
395418
self.graph_bg_color = graph_bg_color
@@ -405,6 +428,8 @@ def load_theme(self) -> None:
405428

406429
self.app.create_graphs()
407430

431+
self.theme_changed = False
432+
408433
print("Theme loaded.")
409434

410435

main.py

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import random
33
from PIL import Image
44
import sys
5+
import pstats
56

67
import openpyxl as op
78
import pandas as pd
@@ -12,6 +13,7 @@
1213
import customtkinter as ctk
1314
from winotify import Notification
1415
from CTkMessagebox import CTkMessagebox
16+
import datetime
1517

1618
from 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

12481262
if __name__ == "__main__":
1249-
App().run()
1263+
App().run()

0 commit comments

Comments
 (0)