Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 7, 2017 10:33:46

Korinn
Зарегистрирован: 2017-05-16
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск виджетов в форме.

Есть QFormLayout из которой нужно получить список виджетов, которые она содержит. Сама форма имеет следующее содержание:

        self.formWidget = QtWidgets.QWidget()
        self.addItemForm = QtWidgets.QFormLayout()
        self.itemType = QtWidgets.QComboBox()
        self.itemType.setInsertPolicy(QtWidgets.QComboBox.InsertAtTop)
        self.itemType.setEditable(True)
        self.model = QtWidgets.QComboBox()
        self.model.setEditable(True)
        self.location = QtWidgets.QComboBox()
        self.location.setEditable(True)
        self.diapason = QtWidgets.QComboBox()
        self.diapason.setEditable(True)
        self.comboBoxDatas()
        self.inter = QtWidgets.QSpinBox()
        self.lastCheck = QtWidgets.QDateEdit()
        self.lastCheck.setCalendarPopup(True)
        date = QtCore.QDate.currentDate()
        self.lastCheck.setDate(date)
        self.hbox = QtWidgets.QHBoxLayout()
        self.addBtn = QtWidgets.QPushButton('Добавить')
        self.hbox.addItem(hSpace)
        self.hbox.addWidget(self.addBtn)
        self.addItemForm.addRow('1', self.itemType)
        self.addItemForm.addRow('2', self.model)
        self.addItemForm.addRow('3', self.location)
        self.addItemForm.addRow('4', self.diapason)
        self.addItemForm.addRow('5', self.inter)
        self.addItemForm.addRow('6', self.lastCheck)
        self.addItemForm.addRow(self.hbox)
        self.addItemForm.addItem(vSpace)
Поиск всех виджеты, осуществляемый с помощью функции findСhildren, возвращает пустой список. Стока кода поиска выглядит следующим образом:
 allWidgetsForm = self.addItemForm.findChildren(QtWidgets.QWidget)
Как получить список виджетов в данной форме?

Офлайн

#2 Июнь 7, 2017 15:52:43

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Поиск виджетов в форме.

Чтобы оно чтото вернуло, виджет должен иметь “детей”. Когда вы делаете .addRow вы добавляете виджет в компоновщик, но это не делает его автоматически родительским обьектом. Родителем являеться виджет для которого QFormLayout является компоновщиком. Поэтому ему и возвращать нечего.
Можно узнать к-во виджетов в компоновщике self.addItemForm.count() и пройтись по всем элемнтам в цикле self.addItemForm.itemAt(index)
Или явно задавать родителя тогда findChildren чтот вернет. Правда я не помню при добавлении виджета в компоновщик оно меняет родителя или нет, если до этого родитель был явно указан.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 7, 2017 15:56:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version