Пример #1
0
class KeyValueLabel(QLabel):
    def __init__(self, parent=None):
        super().__init__(parent)

        self._field_by_row = dict()
        self._layout = QFormLayout()
        self.setLayout(self._layout)

        self.setMinimumSize(200, 150)

    def setFields(self, fields: dict):
        while not self._layout.isEmpty():
            self._layout.takeAt(0)

        for label, field in self._field_by_row.values():
            label.hide()
            field.hide()

        for field_title, value in fields.items():
            value = str(value)

            if field_title in self._field_by_row:
                label_widget, field_widget = self._field_by_row[field_title]
                label_widget.show()
                field_widget.show()

            else:
                label_widget = QLabel(field_title + ":")
                font = label_widget.font()
                font.setBold(True)
                label_widget.setFont(font)

                field_widget = QLabel()
                self._field_by_row[field_title] = (label_widget, field_widget)

            field_widget.setText(value)

            self._layout.addRow(label_widget, field_widget)

    def sizeHint(self):
        return self._layout.sizeHint()