Цикл по виджетам в PyQt Layout

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

11
задан Community 23 May 2017 в 12:02
поделиться