Namen von durch Buttons hinzugefügten Buttons herausfinden

Fragen zu Tkinter.
Antworten
Schaf_Online
User
Beiträge: 5
Registriert: Samstag 8. Mai 2021, 20:19

Mein Programm soll nach unten Labels, Eingabefelder und Buttons hinzufügen. Das klappt auch soweit. Jetzt möchte ich noch, dass man über die erzeugten Buttons in den jeweiligen Zeilen weitere Spalten mit Labels und Eingabefeldern erzeugen kann. Dafür habe ich mir das überlegt:

Code: Alles auswählen

from tkinter import *

y = 2
x = 4
previous_button_id = None


def addBox():
    global y

    asset_label2 = Label(root, text='Asset: ')
    asset_entry2 = Entry(root)
    ticker_label2 = Label(root, text='Ticker: ')
    ticker_entry2 = Entry(root)
    percent_label2 = Label(root, text='Prozentualer Anteil: ')
    percent_entry2 = Entry(root)

    asset_label2.grid(row=y, column=0)
    asset_entry2.grid(row=y, column=1)
    ticker_label2.grid(row=y, column=2)
    ticker_entry2.grid(row=y, column=3)
    percent_label2.grid(row=y+1, column=2)
    percent_entry2.grid(row=y+1, column=3)
    addboxButton.grid(row=y+1)

    global addbox2button2
    addbox2button2 = Button(root, text='+', command=lambda: addBox2(addbox2button2), height=1, width=2)
    addbox2button2.grid(row=y, column=4, padx=3, sticky='w')
    
    y += 2


def addBox2(button_id):
    global x
    global previous_button_id
    
    ticker_label3 = Label(root, text='Ticker: ')
    ticker_entry3 = Entry(root)
    percent_label3 = Label(root, text='Prozentualer Anteil: ')
    percent_entry3 = Entry(root)
    
    if (previous_button_id == None) or (previous_button_id == button_id):
        ticker_label3.grid(row=int(button_id.grid_info()['row']), column=x)
        if button_id.grid_info()['row'] != 0:
            addbox2button2.grid(column=ticker_label3.grid_info()['column']+1, padx=3, sticky='w')
        else:
            addbox2Button.grid(column=ticker_label3.grid_info()['column']+1, padx=3, sticky='w')
            
    else:
        x = 4
        ticker_label3.grid(row=int(button_id.grid_info()['row']), column=x)
        if button_id.grid_info()['row'] != 0:
            addbox2button2.grid(column=ticker_label3.grid_info()['column']+1, padx=3, sticky='w')
        else:
            addbox2Button.grid(column=ticker_label3.grid_info()['column']+1, padx=3, sticky='w')
            
    previous_button_id = button_id
    x +=1

root = Tk()

asset_label = Label(root, text='Asset: ')
ticker_label = Label(root, text='Ticker:')
percent_label= Label(root, text='Prozentualer Anteil:')
asset_entry = Entry(root)
ticker_entry = Entry(root)
percent_entry = Entry(root)
addboxButton = Button(root, text='+', command=addBox, height=1, width=2)
addbox2Button = Button(root, text='+', command=lambda: addBox2(addbox2Button), height=1, width=2, )

asset_label.grid(row=0, column=0)
asset_entry.grid(row=0, column=1)
ticker_label.grid(row=0, column=2)
ticker_entry.grid(row=0, column=3)
percent_label.grid(row=1, column=2)
percent_entry.grid(row=1, column=3)
addboxButton.grid(row=1, column=1, sticky='e')
addbox2Button.grid(row=0, column=4, sticky='w', padx=3, pady=3)

root.mainloop()
. Das Problem ist jetzt aber, dass nur in der untersten hinzugefügten Zeile das Label hinzugefügt wird. Ich nehme an, dass nur noch der unterste Button den Namen behält. Ich habe leider keinen Ideenanstatz, wie ich das fixen kann, und auch im Internet nichts gefunden.
Antworten