commit
18272883b4
@ -0,0 +1,76 @@
|
||||
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()
|
Loading…
Reference in new issue