Как я могу назначить имена объектов для всех QWidgets, QLayouts, QFrames и т. д. в моем классе графического интерфейса? Подобный код работает только в PyQt4:
for w in gui.widgets():
w.setObjectName(str(w)
Как это работает в PyQt5? Также как я могу перебирать все объекты, а не «только» виджеты? Я знаю, что есть несколько ответов на этот вопрос для С++, но я не могу перевести их на python.
1 ответ
Для основных классов QObject или QWidget нет функции widget()
, поэтому вы, вероятно, реализовали ее в своем собственном коде и забыли обновить ее при обновлении для PyQt5.
Чтобы получить доступ ко всем дочерним объектам, просто используйте findChildren
с QObject
в качестве первого аргумента, который вернет всех потомков классов QObject, включая QWidgets, QActions, модели элементов и т. д.:
for child in self.findChildren(QObject):
pass
Поскольку findChildren
по умолчанию выполняет рекурсивный поиск, вы также можете ограничиться прямыми дочерними элементами текущего объекта:
for child in self.findChildren(QObject, options=FindDirectChildrenOnly):
pass
В этом случае результат будет таким же, как self.children()
.
Обратите внимание, что не все классы в Qt наследуются от QObject.
Похожие вопросы
Новые вопросы
pyqt5
Привязки Qt 5 для программирования на Python. Это позволяет программисту создавать графические пользовательские интерфейсы Qt 5 с использованием синтаксиса Python.
widgets()
не существует ни в одном классе QObject или QWidget. Возможно ли, что вы внедрили в свой старый код и забыли его обновить? Или, может быть, вы использовали поиск/замену для чего-то другого, что привело к переименованию этой функции?