Ваша постоянная схема имен позволяет вам использовать имя переменной для перебора ваших переменных:
for i in range(1,n):
label = getattr(self, "lab"+str(i))
Вы можете также рассмотреть возможность использования Tkinter, который сохраняет древовидную структуру ваших виджетов, доступную через атрибут children
widget(словарь):
for child in frame.children.values():
#do something to all children
И, в конце концов, добавьте некоторую фильтрацию, если ваш фрейм содержит другие виджеты.Например, для фильтрации по классам виджетов:
for label in filter(lambda w:isinstance(w,Label), frame.children.itervalues()):
#do something on labels
Обратите внимание, что дочерние элементы не имеют никакой гарантии на обход заказа.Для такой услуги вы можете полагаться на информацию о менеджере геометрии, например pack_slaves
или grid_slaves
:
for child in frame.pack_slaves():
#traverse in pack addition order
#or
for child in reversed(frame.grid_slaves()):
#traverse in grid addition order