Мой вопрос несколько связан с Получить виджеты макета в PyQT , но это не дубликат. Вместо того, чтобы искать стратегическое представление о том, как это сделать, я пытаюсь понять, каким будет самый идиоматичный и простой способ сделать это. Поскольку PyQt является довольно точной привязкой API Qt C ++, он представляет собой простой способ получить виджеты в макете. Вот такая идиома, которую я использовал:
for i in range(layout.count()):
item = layout.itemAt(i)
if type(item) == QtGui.QLayoutItem:
doSomeStuff(item.layout())
if type(item) == QtGui.QWidgetItem:
doSomething(item.widget())
Я не самый опытный парень из Python, но это выглядит несколько не в духе. Моя интуиция подсказывает мне, что в идеальном мире код Python должен выглядеть примерно так:
for w in layout.widgets():
doSomething(w)
Я не прав? Я скучаю по превосходной идиоме? Это лучший способ перебирать виджеты в PyQt? Я склонен думать в C ++, поэтому я иногда упускаю «очевидные» возможности языка Python, которые делают вещи лучше. Часть того, что я делаю, - это рекурсивный переход в виджеты с макетами с виджетами с макетами (и т. Д.) Для автоматического подключения к пользовательскому интерфейсу, созданному в Designer во время выполнения. Добавьте в QTabWidgets обработку динамических свойств, установленных в конструкторе, и мой код в основном работает, но он кажется ужасно неуклюжим.