Как получить все дочерние компоненты QWidget в pyside / pyqt / qt? - PullRequest
8 голосов
/ 22 февраля 2012

Я разрабатываю настольное приложение, используя pyside (qt), я хочу получить доступ (перебрать) все компоненты редактирования строки QWidget.В qt я нашел два метода findChild и findChildren , но не найдено надлежащего примера, и Мой код показывает ошибку, объект 'form' не имеет атрибута 'findChild'. Здесь 'форма' - это форма Qwidget, состоящая из компонентов lineEdit, выпадающих списков, кнопок Qpush и т. Д.

Код:

lineEdits = form.findChild<QLineEdit>() //This is not working

lineEdits = form.findChild('QLineEdit) //This also not working

Ответы [ 2 ]

21 голосов
/ 23 февраля 2012

Сигнатуры findChild и findChildren отличаются в PySide / PyQt4, поскольку в Python нет реального эквивалента синтаксису приведения C ++.

Вместо этого вы должны передать тип (или tuple типов) в качестве первого аргумента и необязательную строку в качестве второго аргумента (для сопоставления objectName).

Итак, ваш пример должен выглядеть примерно так:

lineEdits = form.findChildren(QtGui.QLineEdit)

Обратите внимание, что findChild и findChildren являются методами QObject - поэтому, если у вашей формы их нет, это не может быть QWidget (поскольку все виджеты наследуют QObject).

0 голосов
/ 22 февраля 2012

Используйте этот метод QObject :: findChildren (onst QString & name = QString ()) без параметров.

Если аргумент name не указан, все имена объектов будут сопоставлены.

Вот пример кода C ++:

QList<QLineEdit*> line_edits = form.findChildren<QLineEdit*>();
...