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