Установка родителя не является «окончательной».
From QLayout.addWidget()
(и повторные реализации всех подклассов QLayout):
[.. .] Эта функция использует addItem ().
From QLayout.addItem()
:
Примечание : право собственности на элемент передается в макет, и макет несет ответственность за его удаление.
Когда макет уже установлен для виджета, право собственности передается виджету макета (то же самое происходит, если макет является новым установлен на виджет).
Кроме того, когда вы используете потомок QAbstractScrollArea (включая, очевидно, QScrollArea), у вас есть QWidget, используемый в качестве «области просмотра» (виджет, который прокручивается внутри области прокрутки), который имеет область прокрутки как родительская. При использовании QScrollArea setWidget(widget)
заменяет widget
в область просмотра.
Итак, фактическая иерархия:
scrollarea
viewport
"container" widget
button
Если вы ищете для родительской области прокрутки (при условии, что вы не использовали вложенные области прокрутки, включая потомков представлений элементов), вы можете go примерно так:
class ChildWidget(QtWidgets.QPushButton):
def __init__(self, parent):
super(ChildWidget, self).__init__(parent)
def mousePressEvent(self, event):
obj = self
while not isinstance(obj.parent(), QAbstractScrollArea):
parent = obj.parent()
if not parent:
break
obj = parent
print(obj)