Eine einfache, wöchentliche Planungsanwendung. Die Anwendung wurde mit Python und dem customtkinter-Framework für die grafische Benutzeroberfläche entwickelt.
- Wochenübersicht: Zeigt eine Ansicht der aktuellen Woche.
- Navigation: Einfaches Blättern zu vorherigen und zukünftigen Wochen.
- Standard-Termine: Trägt automatisch einen täglichen Essestermin ein.
- Termin-Management:
- Absagen: Termine können per Knopfdruck abgesagt werden.
- Verschieben: Termine können innerhalb eines Rahmens von +/- 30 Minuten verschoben werden.
- Reset: Geänderte Termine können auf den Standard zurückgesetzt werden.
- Inaktive Vergangenheit: Tage in der Vergangenheit können nicht mehr bearbeitet werden, um die Datenintegrität zu wahren.
- E-Mail-Benachrichtigung: Ein Wochenplan für die kommende Woche kann per Knopfdruck als E-Mail versendet werden.
- Persistente Speicherung: Alle Änderungen an Terminen werden in einer lokalen JSON-Datenbank gespeichert und bleiben nach einem Neustart erhalten.
- Konfigurierbarkeit: Standard-Terminzeiten und der Datenbankpfad sind über eine
config.yaml-Datei anpassbar.
- Python 3.8+
pip(Python package installer)- Eine eingerichtete virtuelle Umgebung wird dringend empfohlen.
-
Repository klonen oder herunterladen:
git clone [URL-des-Repositories] cd mein_essensplaner -
Virtuelle Umgebung erstellen und aktivieren:
python3 -m venv .venv # Virtuelle Umgebung aktivieren (macOS/Linux) source .venv/bin/activate
-
Abhängigkeiten installieren:
pip install -r requirements.txt
-
(Optional) E-Mail-Funktion konfigurieren:
-
Erstelle eine Datei namens
credentials.yamlim Projekt-Root-Verzeichnis (nebenconfig.yaml). -
Füge folgenden Inhalt ein und ersetze die Platzhalter mit den Daten deines E-Mail-Kontos (z.B. ein GMX-Konto, bei dem IMAP/POP3-Zugriff aktiviert ist):
sender_email: "deine.email@provider.de" password: "dein-passwort-oder-app-passwort"
-
Wichtig: Füge
credentials.yamlzu deiner.gitignore-Datei hinzu, um zu verhindern, dass Zugangsdaten versioniert werden.
-
Stelle sicher, dass deine virtuelle Umgebung aktiv ist. Führe dann aus dem Projekt-Root-Verzeichnis den folgenden Befehl aus:
python3 -m mein_essensplaner.mainDie Anwendung nutzt die folgenden 4 Bibliotheken:
customtkinter: Für die Erstellung der grafischen Benutzeroberfläche.tinydb: Als leichte, dokumentenorientierte JSON-Datenbank zur persistenten Speicherung der Termindaten.babel: Zur Übersetung von Datums- und Wochentagsanzeigen in Deutsch.pyyaml: Zum Einlesen und Parsen der Konfigurationsdateien (config.yaml,credentials.yaml).
Das Projekt ist in sechs logische Module aufgeteilt, um eine Trennung der Zuständigkeiten (Separation of Concerns) zu gewährleisten:
mein_essensplaner/(Paket-Ordner)main.py: Haupteinstiegspunkt der Anwendung. Initialisiert alle Komponenten und startet die GUI.app_logic.py: Enthält die Kern-Geschäftslogik (Event-Status verwalten, HTML-Plan generieren).data_manager.py: Kümmert sich um alle Datenbankoperationen (Lesen, Schreiben, Löschen) mittinydb.ui_components.py: Definiert die Haupt-GUI-Klasse, das Layout und die Interaktions-Handler.config_loader.py: Zentrales Modul zum Laden derconfig.yamlundcredentials.yaml.email_sender.py: Gekapselte Funktionalität zum Versenden von E-Mails via SMTP.
config.yaml: Konfigurationsdatei für Standardwerte.credentials.yaml: (Optional, nicht versioniert) Speichert E-Mail-Zugangsdaten.events_db.json: Datenbankdatei (automatisch erstellt).README.md: Diese Dokumentation.
- Module: Das Projekt besteht aus 6 Modulen, was die Anforderung von mindestens 5 Modulen erfüllt.
- Bibliotheken: Es werden 4 externe Bibliotheken verwendet.
- Ausführbarkeit: Das Programm ist über
main.pyohne Parameter startbar. if __name__ == "__main__":: Jedes Modul enthält einen solchen Block, um die geforderte eigenständige Testbarkeit zu demonstrieren.- Code-Umfang: Die Gesamtzeilenzahl des reinen Python-Codes erfüllt die Mindestanforderung von ca. 450 Zeilen. (Lines of Code: 447)