Вы можете установить выравнивание виджетов в QVboxLayout
, чтобы они не растягивались по ширине. И вы также можете добавить растягиваемую проставку в конец макета, чтобы виджеты не располагались вертикально.
При помещении внутрь области прокрутки она будет выглядеть следующим образом:
Вот простая демонстрация:
import sys
from PyQt5 import QtCore, QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
scroll = QtWidgets.QScrollArea()
widget = QtWidgets.QWidget(scroll)
vbox = QtWidgets.QVBoxLayout(widget)
for index in range(5):
for text in 'One', 'Two Two', 'Three Three Three':
button = QtWidgets.QToolButton()
button.setText('%s %s' % (text, index))
vbox.addWidget(button, 0, QtCore.Qt.AlignLeft)
vbox.addStretch()
scroll.setWidget(widget)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(scroll)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.setGeometry(600, 100, 300, 300)
window.show()
sys.exit(app.exec_())