Erstellung einer neuen Zeile durch Button druck

Fragen zu Tkinter.
Antworten
Troxon
User
Beiträge: 3
Registriert: Donnerstag 24. Juni 2021, 15:35

Hallo liebes Python Forum,
ich bin Anfänger und versuche gerade ein kleines Einkaufszettel Programm zu schreiben. Ich möchte das durch druck des Plusbuttons eine neue Zeile erstellt viert mit Checkbutton zum abhaken , Entry Zeile
zum schreiben und mit einem Minusbutton zum löschen der Zeile. Ich habe es geschafft die drei Sachen nebeneinander zu bekommen, das Problem liegt darin das durch druck des Plusbuttons die neue Zeile
rechts neben die andere platziert wird und nicht unter der anderen. Habe es auch schon mit grid probiert aber ohne Erfolg,
danke schon mal im voraus

liebe Grüße Troxon.

Code: Alles auswählen

import tkinter as tk

main = tk.Tk()
main.title("Einkaufszettel")

def anordnung(cb, e, minus_button):
    cb.pack()
    e.pack()
    minus_button.pack()

def zeile_loeschen(e, cb, minus_button):
    e.destroy()
    cb.destroy()
    minus_button.destroy()

def main_button():
    cb = tk.Checkbutton(main)
    cb.pack(side="left")

    e = tk.Entry(main)
    e.pack(side="left")

    minus_button = tk.Button(main, text="-", command=lambda: zeile_loeschen(e, cb, minus_button))
    minus_button.pack(side="left")

def plus():
    plus_button = tk.Button(main, text="+", width=2, height=1, command=lambda: main_button())
    plus_button.pack()

plus()
main_button()

main.mainloop()
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Variablennamen sollten aussagekräftig sein, Ein- oder Zweibuchstabige Kürzel sind das nicht.
`main` ist eine globale Variable. Das sollte nicht sein.
Funktionsnamen sollten Tätigkeiten beschreiben.
`grid` ist schon die richtige Variante, weil Du ja ein 2d-grid hast.

Code: Alles auswählen

import tkinter as tk
from functools import partial

def zeile_loeschen(entities, index):
    for element in entities[index]:
        element.destroy()
    del entities[index]
    for row, elements in enumerate(entities[index:], index+1):
        for col, element in enumerate(elements):
            element.grid(row=row, column=col)
        elements[2]['command'] = partial(zeile_loeschen, entities, index)

def add_entity(root, entities):
    entity_checked = tk.Checkbutton(root)
    entity_checked.grid(row=len(entities)+1, column=0)
    entity_title = tk.Entry(root)
    entity_title.grid(row=len(entities)+1, column=1)
    minus_button = tk.Button(root, text="-", command=partial(zeile_loeschen, entities, len(entities)))
    minus_button.grid(row=len(entities)+1, column=2)
    entities.append((entity_checked, entity_title, minus_button))

def main():
    root = tk.Tk()
    root.title("Einkaufszettel")

    entities = []
    add_entity(root, entities)
    plus_button = tk.Button(root, text="+", width=2, height=1, command=partial(add_entity, root, entities))
    plus_button.grid(row=0, column=0)
    root.mainloop()

if __name__ == "__main__":
    main()
Troxon
User
Beiträge: 3
Registriert: Donnerstag 24. Juni 2021, 15:35

Danke für deine schnelle Antwort und die Tipps,
Grüße Troxon.
Antworten