RQList and RQHBoxLayout with index

example code
import string
import sys

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel, QPushButton

from pyreaqtive.layouts import RQHBoxLayout
from pyreaqtive.models import RQList, RQModel, RQComputedText
from pyreaqtive.widgets import RQLabel


class Item(RQModel):

    def __init__(self):
        super(Item, self).__init__()


next_letter = 0


class ItemWidget(QWidget):

    def __init__(self, model: Item, list_model: RQList):
        super().__init__()

        self.model = model
        self.list_model = list_model

        self.main_layout = QVBoxLayout(self)
        self.resize(200, 200)

        global next_letter
        self.letter_label = QLabel(
            string.ascii_uppercase[next_letter]
        )
        next_letter += 1
        self.main_layout.addWidget(self.letter_label)

        self.delete_button = QPushButton("Delete")
        self.delete_button.clicked.connect(
            lambda: self.model.__del__()
        )
        self.main_layout.addWidget(self.delete_button)

        # Get a reactive index of the item in the list
        self.index = list_model.reactive_index(model)
        self.index_label = RQLabel(
            RQComputedText(
                "index: {index}",
                index=self.index
            )
        )
        self.main_layout.addWidget(self.index_label)


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        widget = QWidget()
        layout = QVBoxLayout()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.my_list = RQList()

        self.add_button = QPushButton("Add")
        self.add_button.clicked.connect(self.add_item)
        layout.addWidget(self.add_button)

        item_display = RQHBoxLayout(
            model=self.my_list,
            widget=ItemWidget
        )
        layout.addLayout(item_display)

    @pyqtSlot()
    def add_item(self):
        self.my_list.append(
            Item()
        )


app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
../_images/rqlist_rqhboxlayout_index.gif