Перемещение скроллбара к последнему виджету
Мне нужно чтобы ползунок скроллбара всегда был внизу. То есть показывались последние добавленные виджеты, а старые уходили наверх.
Порылся в 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())