Вызов группы динамических текстовых переменных из tkentry в Python

#python #onchange

Вопрос:

извините, я не очень хорошо разбираюсь в программировании и структуре кодирования. Я пытаюсь найти пример кода в сети, но не смог получить то, что хотел. Я разрабатываю программу для пользователя, чтобы ввести товар, цену, единицу и итог в 1 строке. Это динамическая строка, поэтому пользователь может вставлять неограниченное количество строк. Мой код ниже, извините, если код грязный. Мне удается получить метод onChange из сети, который работает, но при добавлении строки onChange не может работать с предыдущей строкой, чтобы установить общее значение. Я застрял, буду очень признателен, если кто-нибудь сможет мне помочь.. Большое вам спасибо за потраченное время

 newwin=Tk()
newwin.title ("")
newwin.geometry("1200x550")
y1=0
entry_ITEM_variable = []
scrolledtext_ITEM = []
def OnChange (a, b, c, s_var):
    list_s_vars = s_var.get()
    print (a)
    value_QUANTITY = entry_ITEM_variable[x-3].get() ##getting the value of quantity after cursor crossover from entry box
    value_PRICE = entry_ITEM_variable[x-1].get() ##getting the value of price/unit after cursor crossover from entry box
    value_GRAND_TOTAL = int(value_QUANTITY) * int(value_PRICE) ## multiply to get the total
    entry_ITEM_variable[x].set(value_GRAND_TOTAL) ## display or set the entry box of TOTAL to the value of multiplication

def ADD_COLUMN(): #add column for addititional entry
    global y1 ## row number indexing
    global x ## x is the running index number for textvariable name entry_ITEM_variable[x]

for i in range (5):
    column_position_list = ["0", "2", "3", "4", "5"]
    ENTRY_width = ["4", "15", "10", "15", "15"]
    x=(y1*5) i ## x is the running index number for textvariable name entry_ITEM_variable[x]
    entry_ITEM_variable.append(StringVar()) ##Append must be inside the for loop and outside if statement to prevent list index out of range
    entry_ITEM_variable[x].trace("w", lambda a, b, c, z=x: OnChange (a, b, c, entry_ITEM_variable[z])) 
    ITEM_entry = ttk.Entry(newwin, textvariable=entry_ITEM_variable[x], width=ENTRY_width[i])
    ITEM_entry.grid(row=y1 1, column=column_position_list[i], padx=3)## uses grid to place according to row and column and padx/pady to set distance from widget to widget
scrolledtext_ITEM.append(IntVar()) ##Append scrolledtext to scrolledtect_value[y1] so can be called anytime by using scrolledtext_value.get()
entry_ITEM_variable[x-4].set(int(y1 1))
scrolledtext_ITEM[y1] = scrolledtext.ScrolledText(newwin, width=82, height=6)
scrolledtext_ITEM[y1].grid(row=y1 1, column=1, padx=3, pady=3) ## place widget on a window 
setup above and uses grid to place according to row and column and padx/pady to set distance 
from widget to widget
y1=y1 1 ##y1 is the integer for start row no(ITEM numbering) and scrolledtext widget numbering

ADD_button=Button(newwin,text="ADD COLUMN", relief="groove", command=lambda:ADD_COLUMN()) ## 
Button for additional entry
ADD_button.grid(row=0,column=0)