I'm going to let you decipher where the entry widget is embedded, but this code holds the answer.
The way you have complicated the widget array makes me dizzy and you are more familiar with your code
Your lists seem way over compilcated
results when run:
The way you have complicated the widget array makes me dizzy and you are more familiar with your code
from tkinter import * from tkinter import ttk def set_input(frame, self): row = self.grid_info()["row"] col = self.grid_info()["column"] # print("row " + str(row) + ", column " + str(col)) return True mw = Tk() # 999x999 is size of window, 999+999 is the location of the window mw.geometry("600x200+400+200") mw.title("test program") frame1 = Frame(mw) frame1.pack(side=TOP) framebot = Frame(mw) framebot.pack(side=BOTTOM, fill=X) field_labels = ["field1", "field2", "field3"] values = [] for i in range(0, 5): values.append([]) j = 0 values[i].append( Entry( frame1, validate="focusout", validatecommand=lambda: set_input(frame1, values[i][j]), ) ) values[i][j].grid(row=i, column=j) j += 1 values[i].append( ttk.Combobox( frame1, values=field_labels, validate="focusout", validatecommand=lambda: set_input(frame1, values[i][j]), ) ) values[i][j].grid(row=i, column=j) print(f"row: {values[i][0].grid_info()}") print(f"row: {values[i][1].grid_info()}") btn = Button(framebot, text="Exit", font=("Times", 16), command=mw.quit).pack( side="left" ) mw.mainloop()The answer is here, you just have to pull out with the right indexes.
Your lists seem way over compilcated
results when run:
Output:row: {'in': <tkinter.Frame object .!frame>, 'column': 0, 'row': 0, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 1, 'row': 0, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 0, 'row': 1, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 1, 'row': 1, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 0, 'row': 2, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 1, 'row': 2, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 0, 'row': 3, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 1, 'row': 3, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 0, 'row': 4, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}
row: {'in': <tkinter.Frame object .!frame>, 'column': 1, 'row': 4, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}