Oczywiście, mogę stworzyć program, który spełni Twoje wymagania, z prostym interfejsem graficznym do rejestrowania aktywności. Program będzie miał następujące funkcje: 1. **Zaznaczenie dni tygodnia** (checkbox'y dla każdego dnia tygodnia). 2. **Godzina rozpoczęcia i zakończenia** aktywności. 3. **Czas trwania** obliczany na podstawie godziny rozpoczęcia i zakończenia. 4. **Ocena aktywności** w postaci gwiazdek (1–5). 5. **Liczba aktywności związanych z "edgingiem"** (checkbox z liczbą takich aktywności). Poniżej znajduje się przykładowy kod w Pythonie z wykorzystaniem **Tkinter** do stworzenia GUI: ### Program: ```python import tkinter as tk from tkinter import messagebox from datetime import datetime # Lista do przechowywania aktywności activities = [] # Funkcja do obliczania czasu trwania def calculate_duration(start, end): try: start_time = datetime.strptime(start, "%H:%M") end_time = datetime.strptime(end, "%H:%M") duration = end_time - start_time return duration except ValueError: messagebox.showerror("Błąd", "Niepoprawny format czasu. Użyj formatu HH:MM.") return None # Funkcja do dodawania aktywności def submit_activity(): # Pobranie danych z formularza days = [day_var.get() for day_var in day_vars if day_var.get()] start_time = start_time_entry.get() end_time = end_time_entry.get() stars = rating_var.get() edging_count = int(edging_var.get()) # Sprawdzanie, czy zostały zaznaczone dni, godziny i ocena if not days: messagebox.showerror("Błąd", "Wybierz co najmniej jeden dzień tygodnia.") return if not start_time or not end_time: messagebox.showerror("Błąd", "Wprowadź godziny rozpoczęcia i zakończenia.") return if stars == 0: messagebox.showerror("Błąd", "Wybierz ocenę w skali 1-5.") return # Obliczanie czasu trwania duration = calculate_duration(start_time, end_time) if duration is None: return # Dodanie aktywności do listy activity = { "days": days, "start_time": start_time, "end_time": end_time, "duration": str(duration), "stars": stars, "edging_count": edging_count } activities.append(activity) # Aktualizacja podsumowania update_summary() # Informacja o dodaniu aktywności messagebox.showinfo("Sukces", "Aktywność została dodana!") # Funkcja do aktualizacji podsumowania def update_summary(): total_activities = len(activities) total_edging = sum(activity['edging_count'] for activity in activities) total_stars = sum(activity['stars'] for activity in activities) average_stars = total_stars / total_activities if total_activities else 0 # Wyświetlenie podsumowania total_activities_label.config(text=f"Liczba aktywności: {total_activities}") total_edging_label.config(text=f"Liczba aktywności z edgingiem: {total_edging}") average_stars_label.config(text=f"Średnia ocena: {average_stars:.2f}") # Tworzenie głównego okna root = tk.Tk() root.title("Rejestrator Aktywności") # Zmienne dla dni tygodnia day_vars = [tk.StringVar(value="") for _ in range(7)] days_of_week = ["Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"] for i, day in enumerate(days_of_week): day_check = tk.Checkbutton(root, text=day, variable=day_vars[i], onvalue=day, offvalue="") day_check.grid(row=i, column=0, padx=10, pady=5, sticky="w") # Wprowadzenie godziny rozpoczęcia i zakończenia tk.Label(root, text="Godzina rozpoczęcia (HH:MM):").grid(row=7, column=0, padx=10, pady=5, sticky="w") start_time_entry = tk.Entry(root) start_time_entry.grid(row=7, column=1, padx=10, pady=5) tk.Label(root, text="Godzina zakończenia (HH:MM):").grid(row=8, column=0, padx=10, pady=5, sticky="w") end_time_entry = tk.Entry(root) end_time_entry.grid(row=8, column=1, padx=10, pady=5) # Ocena w skali gwiazdkowej tk.Label(root, text="Ocena (1-5 gwiazdek):").grid(row=9, column=0, padx=10, pady=5, sticky="w") rating_var = tk.IntVar(value=0) rating_scale = tk.Scale(root, from_=1, to=5, orient="horizontal", variable=rating_var) rating_scale.grid(row=9, column=1, padx=10, pady=5) # Liczba aktywności z edgingiem tk.Label(root, text="Liczba aktywności z edgingiem:").grid(row=10, column=0, padx=10, pady=5, sticky="w") edging_var = tk.StringVar(value="0") edging_entry = tk.Entry(root, textvariable=edging_var) edging_entry.grid(row=10, column=1, padx=10, pady=5) # Przycisk do dodania aktywności tk.Button(root, text="Dodaj Aktywność", command=submit_activity).grid(row=11, column=0, columnspan=2, pady=10) # Podsumowanie aktywności total_activities_label = tk.Label(root, text="Liczba aktywności: 0") total_activities_label.grid(row=12, column=0, columnspan=2, pady=5) total_edging_label = tk.Label(root, text="Liczba aktywności z edgingiem: 0") total_edging_label.grid(row=13, column=0, columnspan=2, pady=5) average_stars_label = tk.Label(root, text="Średnia ocena: 0.00") average_stars_label.grid(row=14, column=0, columnspan=2, pady=5) # Uruchomienie aplikacji root.mainloop() ``` ### Wyjaśnienie funkcji programu: 1. **Wybór dni tygodnia**: Używamy **checkboxów** dla każdego dnia tygodnia. Możesz zaznaczyć dowolną liczbę dni, w których wykonywałeś aktywność. 2. **Godziny rozpoczęcia i zakończenia**: Wprowadzamy czas w formacie `HH:MM`. Na podstawie tych godzin obliczamy **czas trwania** aktywności. 3. **Ocena**: Możesz ocenić aktywność w skali 1-5 za pomocą suwaka (slidera). 4. **Liczba aktywności z edgingiem**: Wprowadzasz liczbę aktywności, które były związane z edgingiem. Jest to liczone oddzielnie, aby móc później obliczyć sumę takich aktywności. 5. **Podsumowanie**: Po dodaniu aktywności, na dole okna wyświetlają się podsumowania: - Liczba aktywności. - Liczba aktywności związanych z edgingiem. - Średnia ocena aktywności. ### Jak uruchomić: 1. Zainstaluj Pythona (jeśli jeszcze go nie masz) i upewnij się, że masz zainstalowaną bibliotekę **Tkinter** (jest domyślnie instalowana z Pythonem). 2. Zapisz powyższy kod w pliku, np. `aktywnosci.py`. 3. Uruchom skrypt: ```bash python aktywnosci.py ``` 4. Program uruchomi okno, w którym będziesz mógł rejestrować swoje aktywności.