Мой вопрос в некоторой степени связан с Получить виджеты макета в PyQT , но это не так. дубликат. Вместо того чтобы искать высокоуровневое стратегическое представление о том, как это сделать, я пытаюсь понять, какой способ сделать это был бы наиболее идиоматичным и простым. Поскольку PyQt представляет собой довольно точную привязку Qt C ++ API, он представляет собой 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 и обработать динамические свойства, установленные в дизайнере, и мой код в основном работает, но кажется ужасно неуклюжим.