Перемещение скроллбара к последнему виджету

Мне нужно чтобы ползунок скроллбара всегда был внизу. То есть показывались последние добавленные виджеты, а старые уходили наверх. Порылся в Qt документации и попытался сделать так, добавив это в конец функции create_label, но ничего не изменилось:

a = self.scrollarea.viewportSizeHint()
self.scrollarea.scrollContentsBy(a.width(), a.height())

Минимально воспроизводимый пример:

import os, sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QHBoxLayout, QVBoxLayout, QScrollArea

class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.vvbox = QVBoxLayout(self)
        self.scrollarea = QScrollArea()
        self.scrollarea.setWidgetResizable(True)
        self.area = QWidget()
        self.label_box = QVBoxLayout()

        self.button = QPushButton('button')
        self.button.clicked.connect(self.create_label)

        self.area.setLayout(self.label_box)
        self.scrollarea.setWidget(self.area)
        self.vvbox.addWidget(self.scrollarea)
        self.vvbox.addWidget(self.button)

    def create_label(self):
        label = QLabel('text')
        self.label_box.addWidget(label)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MyWin()
    w.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: gil9red

А попробуйте так (ссылка на источник):

def init_ui(self):
    ...
    scrollbar = self.scrollarea.verticalScrollBar()
    scrollbar.rangeChanged.connect(lambda min, max: scrollbar.setValue(max))
    ...

def create_label(self):
    label = QLabel('text')
    self.label_box.addWidget(label)
    self.scrollarea.verticalScrollBar().setSliderPosition(self.scrollarea.verticalScrollBar().maximum())
→ Ссылка