С помощью любого фреймворка это можно реализовывать.
Использую PyQt, это может выглядеть примерно так:
import sys
from PyQt5.Qt import *
class Widget(QGroupBox):
def __init__(self, name):
super().__init__()
self.setTitle(name.upper())
self.name = name
self.lbl = QLabel(f'Label {self.name}')
self.lbl.setTextInteractionFlags(Qt.TextSelectableByMouse)
self.btn = QPushButton(f'Button {self.name}')
self.btn.clicked.connect(self.printsignal)
self.lineEdit = QLineEdit(f'LineEdit {self.name}')
self.layout = QGridLayout(self)
self.layout.addWidget(self.lbl, 0, 0)
self.layout.addWidget(self.btn, 0, 1)
self.layout.addWidget(self.lineEdit, 1, 0, 1, 2)
self.layout.setColumnStretch(0, 1)
def printsignal(self):
print(
f"clicked: \n\tTitle --> {self.title()}"
f" \n\tLabel --> {self.lbl.text()}"
f" \n\tLineEdit --> {self.lineEdit.text()}"
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
centralWidget = QWidget()
self.setCentralWidget(centralWidget)
value = 12
self._list = [f'item{i}' for i in range(1, value+1)]
self.controls = QWidget()
self.controlsLayout = QVBoxLayout(self.controls)
self.widgets = []
for name in self._list:
item = Widget(name)
self.controlsLayout.addWidget(item)
self.widgets.append(item)
spacer = QSpacerItem(1, 1, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.controlsLayout.addItem(spacer)
self.scroll = QScrollArea()
self.scroll.setWidgetResizable(True)
self.scroll.setWidget(self.controls)
self.spinBox = QSpinBox()
self.spinBox.setRange(1, 12)
self.spinBox.setProperty("value", 12)
self.spinBox.valueChanged.connect(self.update_display)
containerLayout = QVBoxLayout(centralWidget)
containerLayout.addWidget(self.spinBox)
containerLayout.addWidget(self.scroll)
def update_display(self, value):
for i, widget in enumerate(self.widgets):
if i+1 <= value:
widget.show()
else:
widget.hide()
def sizeHint(self):
return self.scroll.widget().size() * 0.7
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

PyQt — набор расширений графического фреймворка Qt для языка программирования Python, выполненный в виде расширения Python.
PyQt работает на всех платформах, поддерживаемых Qt
: Linux и другие UNIX-подобные ОС, Mac OS X и Windows.