Anfänger machen Fehler, weil ihnen noch niemand gezeigt hat, wie es richtig geht. Wenn man sie nicht auf Fehler hinweist, können sie ja nicht besser werden.
Die Importe sind wirr. *-Importe benutzt man nicht, weil sie verschleiern, woher welcher Name kommt. Der Kommentar ist überflüssig, weil man ja am ›import‹ erkennt, dass es sich um Importe handelt. Alle Importe sind notwendig, weil nicht-notwendige würde man löschen.
Man benutzt keine globalen Variablen, alle Informationen müssen den Funktionen über Argumente übergeben werden.
Man darf keine absoluten Größen angeben, weil das je nach System die GUI unbenutzbar macht. Bei mir überschneiden sich die GUI-Elemente zum Beispiel.
Sehr verwirrend ist, dass drei Label `label_street` heißen, oder der Button zum Zurücksetzen gleich, wie der zum Speichern.
Nicht alles braucht einen Variablennamen.
Die Label sollten in der Nähe der Textfelder stehen.
Warum verwendest Du für die Radiobuttons Zahlen, wo Du doch eigentlich Strings willst?
Code: Alles auswählen
#!/usr/bin/python
from functools import partial
import tkinter as tk
from tkinter import ttk
import csv
import pandas
def search(entry_search, var, text):
text.delete("1.0","end")
choice = var.get()
sd = pandas.read_csv('Knotenzuordnung.csv')
res_sd = sd.query(f'{output} == "{entry_search.get()}"')
text.insert(END, f"{res_sd}")
def delete_search(entry_search):
entry_search.delete(0, tk.END)
def delete_all(entries):
for entry in entries:
entry.delete(0, tk.END)
def save(entries):
with open(
"Knotenzuordnung.csv", "a", newline="", encoding="utf-8"
) as file:
csv.writer(file).writerow(
[
entry.get()
for entry in entries
]
)
def main():
root = tk.Tk()
root.title('Adressbuch Knotenzuweisung')
left_frame = tk.Frame(root)
left_frame.grid(row=0, column=0, sticky=tk.NW)
tk.Label(left_frame, text='Neue Daten eintragen : ',
font=('times', 14, 'bold')
).grid(row=0, column=0, columnspan=2, sticky=tk.NW)
tk.Label(left_frame, text='Strasse:').grid(row=1, column=0, sticky=tk.NW)
entry_street = ttk.Entry(left_frame, width=40)
entry_street.grid(row=1, column=1)
tk.Label(left_frame, text='Hausnummer:').grid(row=2, column=0, sticky=tk.NW)
entry_number = ttk.Entry(left_frame, width=40)
entry_number.grid(row=2, column=1, sticky=tk.NW)
tk.Label(left_frame, text='Kunde:').grid(row=3, column=0, sticky=tk.NW)
entry_customer = ttk.Entry(left_frame, width=40)
entry_customer.grid(row=3, column=1, sticky=tk.NW)
tk.Label(left_frame, text='Knotennummer:').grid(row=4, column=0, sticky=tk.NW)
entry_node = ttk.Entry(left_frame, width=40)
entry_node.grid(row=4, column=1, sticky=tk.NW)
tk.Label(left_frame, text='Bemerkung:').grid(row=5, column=0, sticky=tk.NW)
entry_notice = ttk.Entry(left_frame, width=40)
entry_notice.grid(row=5, column=1, sticky=tk.NW)
entries = [
entry_street,
entry_number,
entry_customer,
entry_node,
entry_notice,
]
frame = tk.Frame(left_frame)
frame.grid(row=6, column=1, sticky=tk.NW)
ttk.Button(frame, text="Speichern", command=partial(save, entries)).pack(side=tk.LEFT)
ttk.Button(frame, text="Eingaben zurücksetzen", command=partial(delete_all, entries)).pack(side=tk.LEFT)
right_frame = tk.Frame(root)
right_frame.grid(row=0, column=1, sticky=tk.NW)
tk.Label(right_frame, text='Neue Suche starten : ',
font=('times', 14, 'bold')
).grid(row=0, column=2, columnspan=2, sticky=tk.NW)
tk.Label(right_frame, text='Suche nach : ').grid(row=1, column=2, sticky=tk.NW)
entry_search = ttk.Entry(right_frame, width=40)
entry_search.grid(row=1, column=3, sticky=tk.NW)
frame = tk.Frame(right_frame)
frame.grid(row=2, column=3, sticky=tk.NW)
var = tk.StringVar(root)
tk.Radiobutton(frame, text="Strasse", variable=var, value="Strasse").pack(side=tk.LEFT)
tk.Radiobutton(frame, text="Kunde", variable=var, value="Kunde").pack(side=tk.LEFT)
tk.Radiobutton(frame, text="Knoten", variable=var, value="Knoten").pack(side=tk.LEFT)
tk.Label(right_frame, text='Ausgabe:',
font=('times', 14, 'bold')).grid(row=4, column=2, columnspan=2, sticky=tk.NW)
text = tk.Text(right_frame, width=60, height=5).grid(row=5, column=2, columnspan=2, sticky=tk.NW)
frame = tk.Frame(right_frame)
frame.grid(row=3, column=3, sticky=tk.NW)
ttk.Button(frame, text="Suchen", command=partial(search, entry_search, var, text)).pack(side=tk.LEFT)
ttk.Button(frame, text="Eingabe löschen", command=partial(delete_search, entry_search)).pack(side=tk.LEFT)
root.mainloop()
if __name__ == "__main__":
main()
Und bei mir werden keine Einträge in der Datei überschrieben. Warum glaubst Du, dass das passiert?