You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.1 KiB

2 years ago
import PySimpleGUI as sg
import time
import csv
import os
data_file = 'task_data.csv'
def load_data():
if os.path.exists(data_file):
with open(data_file, 'r') as f:
return list(csv.reader(f))
return []
def save_data(data):
with open(data_file, 'w') as f:
csv.writer(f).writerows(data)
def format_data(entry):
start, end, elapsed, task = entry
return f"{task} | Start: {time.ctime(float(start))} | End: {time.ctime(float(end))} | Duration: {elapsed}s"
data = load_data()
layout1 = [
[sg.Text("Task you're going to do"), sg.Input(key="task")],
[sg.Button("Start tracking", key="track_btn")],
]
layout2 = [
[sg.Listbox([format_data(entry) for entry in data], size=(60, 10), key="task_list")],
[sg.Button("Delete all entries"), sg.Button("Export to CSV"), sg.Button("Import from CSV")],
]
layout = [[sg.TabGroup([[sg.Tab("Task Tracker", layout1), sg.Tab("Task Data", layout2)]])]]
window = sg.Window("Task Tracker", layout)
tracking = False
start_time = None
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
if event == "track_btn":
if not tracking:
task = values["task"]
if not task:
continue
start_time = time.time()
window["task"].update(disabled=True)
window["track_btn"].update("Stop task")
else:
end_time = time.time()
elapsed = round(end_time - start_time, 2)
entry = [str(start_time), str(end_time), str(elapsed), task]
data.append(entry)
save_data(data)
window["task_list"].update([format_data(e) for e in data])
window["task"].update("", disabled=False)
window["track_btn"].update("Start tracking")
tracking = not tracking
if event == "Delete all entries":
data.clear()
save_data(data)
window["task_list"].update([])
if event == "Export to CSV":
save_data(data)
if event == "Import from CSV":
data = load_data()
window["task_list"].update([format_data(e) for e in data])
window.close()