siehe auch Dateien speichern
Um mit mehreren Daten zu arbeiten, werden oftmals Dictonarys (dt. Wörterbücher) verwendet
Dictonarys dienen zum Speichern von Datenwerten in Schlüssel-Wert-Paaren. Ein Dictonarys ist eine geordnete*, veränderbare Sammlung, die keine Duplikate zulässt. Die Syntax für Dictionaries in Python: Die Schlüssel müssen als Strings in Anführungszeichen geschrieben werden, nicht wie in JavaScript ohne Anführungszeichen.

adresse = {
"vorname":"Mandy",
"nachname":"Seider",
"ort":"Kiel"
}
Ausgabe der Anzahl der Elemente im Dictonary:
print (len(adresse))

Zugriff auf Elemente
Sie können auf die Elemente eines Wörterbuchs zugreifen, indem Sie auf den Schlüsselnamen in eckigen Klammern verweisen:
x=adresse.get("vorname")

Die Methode keys() gibt eine Liste aller Schlüssel im Wörterbuch zurück.
Um mehrere Eingaben in deinem Tkinter-Programm zu speichern, musst du die Eingaben nach jedem Klick auf „Speichern“ in einer Datenstruktur wie einer Liste ablegen. Zusätzlich kannst du sie optional in einer Datei (z.B. als JSON) dauerhaft speichern. Hier ein Beispiel, wie du das umsetzen kannst:
Beispiel: Mehrere Eingaben in einer Liste speichern
Bei jedem Klick auf „Speichern“ wird der aktuelle Text aus dem Entry-Feld mit .get()
ausgelesen und zur Liste eingaben
hinzugefügt. Das Eingabefeld wird danach geleert. Mit dem Button „Alle Eingaben speichern“ werden alle gesammelten Einträge in eine JSON-Datei geschrieben. Die Nutzung einer Liste ist der Standardweg, um mehrere Werte zwischenzuspeichern
Du kannst die Liste später beliebig weiterverarbeiten oder beim Programmstart aus einer Datei wieder laden.
Hinweis
- Wenn du mehrere Entry-Felder gleichzeitig verwalten willst, kannst du sie in einer Liste speichern und mit einer Schleife auslesen
Die Methode .get()
liest jeweils den aktuellen Wert eines Entry-Feldes aus
Mit diesem Ansatz kannst du beliebig viele Eingaben nacheinander erfassen

import tkinter as tk
from tkinter import messagebox
import json
import os
# Liste zum Speichern der Eingaben
eingaben = []
def speicherung():
text = e1.get()
if text:
eingaben.append(text)
e1.delete(0, tk.END) # Eingabefeld leeren
messagebox.showinfo("Gespeichert", f"Eingabe gespeichert: {text}")
else:
messagebox.showwarning("Fehler", "Bitte Text eingeben!")
def speichern_in_datei():
with open("eingaben.json", "w", encoding="utf-8") as f:
json.dump(eingaben, f, ensure_ascii=False, indent=2)
messagebox.showinfo("Datei", "Alle Eingaben wurden in 'eingaben.json' gespeichert.")
root = tk.Tk()
root.geometry("300x300")
l1 = tk.Label(text="Text eingeben, der gespeichert werden soll:")
l1.pack()
e1 = tk.Entry(root)
e1.pack()
b1 = tk.Button(text="Speichern", command=speicherung)
b1.pack()
b2 = tk.Button(text="Alle Eingaben speichern", command=speichern_in_datei)
b2.pack()
root.mainloop()
Es gibt verschiedene Möglichkeiten, Daten fortlaufend zu speichern. Hier sind zwei bewährte Ansätze:
1. Speichern nach jeder Eingabe (z.B. nach Drücken von Enter)
Du kannst einen Event-Handler für das Entry-Feld einrichten, der bei jeder Eingabe speichert:
import tkinter as tk
from tkinter import messagebox
import json
eingaben = []
def speichern_in_datei():
with open("eingaben.json", "w", encoding="utf-8") as f:
json.dump(eingaben, f, ensure_ascii=False, indent=2)
def eingabe_speichern(event=None):
text = e1.get().strip()
if text:
eingaben.append(text)
speichern_in_datei() # Speichert sofort nach jeder Eingabe
e1.delete(0, tk.END)
root = tk.Tk()
root.geometry("300x300")
l1 = tk.Label(text="Text eingeben, der gespeichert werden soll:")
l1.pack()
e1 = tk.Entry(root)
e1.pack()
e1.bind("<Return>", eingabe_speichern) # Speichert bei Enter
b2 = tk.Button(text="Dateien Speichern", command=speichern_in_datei)
b2.pack()
root.mainloop()
Vorteil:
Jede Eingabe wird sofort gespeichert, kein Datenverlust bei Absturz.
2. Automatisches Speichern in festen Intervallen
Du kannst auch einen Timer verwenden, der z.B. alle 10 Sekunden automatisch speichert:
import tkinter as tk
from tkinter import messagebox
import json
eingaben = []
def speichern_in_datei():
with open("eingaben.json", "w", encoding="utf-8") as f:
json.dump(eingaben, f, ensure_ascii=False, indent=2)
def eingabe_speichern(event=None):
text = e1.get().strip()
if text:
eingaben.append(text)
e1.delete(0, tk.END)
def auto_speichern():
speichern_in_datei()
root.after(10000, auto_speichern) # alle 10 Sekunden
root = tk.Tk()
root.geometry("300x300")
l1 = tk.Label(text="Text eingeben, der gespeichert werden soll:")
l1.pack()
e1 = tk.Entry(root)
e1.pack()
e1.bind("<Return>", eingabe_speichern)
b2 = tk.Button(text="Dateien Speichern", command=speichern_in_datei)
b2.pack()
root.after(10000, auto_speichern) # startet automatisches Speichern
root.mainloop()
Vorteil:
Auch ohne Benutzeraktion wird regelmäßig gespeichert.
Tipp:
Du kannst beide Methoden kombinieren:
- Sofortiges Speichern nach jeder Eingabe
- Zusätzlich regelmäßiges Backup
Hinweis:
Achte darauf, dass du nicht zu oft speicherst (Performance), aber auch nicht zu selten (Datenverlust).
Der Code wird immer überschrieben. Neue Eingaben sollen aber in die Datei hinzugefügt werden
Das Schreiben mit "w"
im open()
-Befehl überschreibt immer die gesamte Datei. Wenn du neue Eingaben anhängen möchtest, musst du die bisherigen Daten aus der Datei lesen, die neue Eingabe hinzufügen und dann alles wieder speichern.
Code: Neue Eingaben an bestehende Datei anhängen
import tkinter as tk
from tkinter import messagebox
import json
import os
DATEINAME = "eingaben.json"
def lade_eingaben():
if os.path.exists(DATEINAME):
with open(DATEINAME, "r", encoding="utf-8") as f:
try:
return json.load(f)
except json.JSONDecodeError:
return []
return []
def speichere_eingaben(eingaben):
with open(DATEINAME, "w", encoding="utf-8") as f:
json.dump(eingaben, f, ensure_ascii=False, indent=2)
def eingabe_speichern(event=None):
text = e1.get().strip()
if text:
eingaben = lade_eingaben() # Vorherige Daten laden
eingaben.append(text) # Neue Eingabe anhängen
speichere_eingaben(eingaben)
e1.delete(0, tk.END)
messagebox.showinfo("Gespeichert", "Eingabe wurde gespeichert!")
root = tk.Tk()
root.geometry("300x300")
l1 = tk.Label(text="Text eingeben, der gespeichert werden soll:")
l1.pack()
e1 = tk.Entry(root)
e1.pack()
e1.bind("<Return>", eingabe_speichern)
b2 = tk.Button(text="Eingabe speichern", command=eingabe_speichern)
b2.pack()
root.mainloop()
Was macht dieser Code?
- Liest beim Speichern immer zuerst die Datei ein (falls sie existiert).
- Fügt die neue Eingabe zur Liste hinzu.
- Speichert die aktualisierte Liste zurück in die Datei.
Eingaben auslesen:
import tkinter as tk
from tkinter import messagebox
eingaben = [] # Hier werden alle Eingaben gesammelt
def eingabe_speichern(event=None):
text = e1.get().strip()
if text:
eingaben.append(text) # Neue Eingabe zur Liste hinzufügen
e1.delete(0, tk.END)
messagebox.showinfo("Gespeichert", "Eingabe wurde gespeichert!")
def eingaben_anzeigen():
ausgabe.delete("1.0", tk.END) # Textbox leeren
for eintrag in eingaben: # Mit Schleife alle Einträge anzeigen
ausgabe.insert(tk.END, eintrag + "\n")
root = tk.Tk()
root.geometry("350x350")
l1 = tk.Label(text="Text eingeben, der gespeichert werden soll:")
l1.pack()
e1 = tk.Entry(root)
e1.pack()
e1.bind("<Return>", eingabe_speichern)
b1 = tk.Button(text="Eingabe speichern", command=eingabe_speichern)
b1.pack()
b2 = tk.Button(text="Alle Eingaben anzeigen", command=eingaben_anzeigen)
b2.pack()
ausgabe = tk.Text(root, height=10, width=40)
ausgabe.pack()
root.mainloop()
