Как создать строки с помощью цикла For
У меня есть список с разными элементами количество которых может изменяться и мне нужно создать под каждый элемент списка своё поле и строку с выпадающим списком. Я делаю это с помощью цикла for но мне так же нужна возможность обратиться к каждому выпадающему списку что бы получить выбранное значение. Сейчас мой код выглядит так:
comp_count = 0
for component in unique_components:
comp_count = comp_count + 1
comp = tk.Text(tab3, width=lenght+1, height=1)
if comp_count % 2 == 0:
comp = tk.Text(tab3, width=lenght+1, height=1, bg='#d6d4d4')
comp.insert(1.0, component)
comp.configure(state=tk.DISABLED)
comp.grid(row=comp_count, column=0)
stack_choose = ttk.Combobox(tab3, values='8mm 12mm 16mm 24mm Special', state='readonly')
stack_choose.grid(row=comp_count, column=2)
А результат вот так:
То есть интерфейс выглядит так как мне нужно но я не могу обратиться ни к строчке, ни к выпадающему списку
Ответы (1 шт):
До цикла создайте пустой список, в цикле добавляете создаваемый контролы как строки в этот список (подсписками/кортежами/namedtuple/свой класс):
components = []
for component in unique_components:
...
components.append([comp, stack_choose])
Дальше обращаетесь к нужному контролу в списке по индексу или в цикле.
Минимальный пример:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
unique_components = ["abc", "def", "ghj"]
tab3 = root
components = []
comp_count = 0
for component in unique_components:
comp_count = comp_count + 1
comp = tk.Text(tab3, height=1)
comp.insert(1.0, component)
comp.configure(state=tk.DISABLED)
comp.grid(row=comp_count, column=0)
stack_choose = ttk.Combobox(tab3, values='8mm 12mm 16mm 24mm Special', state='readonly')
stack_choose.grid(row=comp_count, column=2)
components.append([comp, stack_choose])
def print_data():
for comp, stack_choose in components:
print(comp.get(1.0, tk.END).rstrip(), stack_choose.get())
tk.Button(root, text="Get data", command=print_data).grid()
root.mainloop()
Скриншот окна и вывода терминала после ввода и нажатия на кнопку:

