Тайм-трекер продуктивности
import tkinter as tk
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
import os
activities = ['Работа', 'Отдых', 'Прокрастинация']
data_file = 'activities_log.csv'
# Начальные данные
current_activity = None
start_time = None
def switch_activity(activity):
global current_activity, start_time
now = datetime.now()
if current_activity is not None and start_time is not None:
duration = (now - start_time).total_seconds() / 60 # в минутах
save_activity(current_activity, duration)
current_activity = activity
start_time = now
status_label.config(text=f"Текущая активность: {activity}")
def save_activity(activity, duration):
df = pd.DataFrame([{
'timestamp': datetime.now(),
'activity': activity,
'duration_min': round(duration, 2)
}])
df.to_csv(data_file, mode='a', header=not os.path.exists(data_file), index=False)
def show_stats():
if not os.path.exists(data_file):
print("Нет данных")
return
df = pd.read_csv(data_file)
day = datetime.now().date()
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df[df['timestamp'].dt.date == day]
summary = df.groupby('activity')['duration_min'].sum()
# Построение круговой диаграммы
plt.figure(figsize=(6, 6))
plt.pie(summary, labels=summary.index, autopct='%1.1f%%', startangle=90)
plt.title(f'Продуктивность за {day}')
plt.tight_layout()
plt.show()
# GUI
root = tk.Tk()
root.title("Трекер продуктивности")
status_label = tk.Label(root, text="Выберите активность", font=("Arial", 14))
status_label.pack(pady=10)
for act in activities:
tk.Button(root, text=act, font=("Arial", 12), width=20,
command=lambda a=act: switch_activity(a)).pack(pady=5)
tk.Button(root, text="Показать статистику", command=show_stats, bg='lightgreen').pack(pady=15)
root.mainloop()