def add_child(num_children, nesting_level): result = [] if nesting_level == 0: return result for i in range(num_children): child = QStandardItem("Child num {}, nesting Level {}".format( i + 1, nesting_level)) if i == 0: child.appendRow(add_child(num_children, nesting_level - 1)) result.append(child) return result
def create_combo_box_items(self): model = QStandardItemModel() self.ui.combo_classes.setModel(model) self.ui.combo_functions.setModel(model) for k, v in self.data.items(): cls = QStandardItem(k) model.appendRow(cls) for value in v: func = QStandardItem(value) cls.appendRow(func) def update_combo_box(index): ind = model.index(index, 0, self.ui.combo_classes.rootModelIndex()) self.ui.combo_functions.setRootModelIndex(ind) self.ui.combo_functions.show() self.ui.combo_functions.setCurrentIndex(0) self.ui.config_label.setText('') self.ui.combo_classes.currentIndexChanged.connect(update_combo_box)
return result if __name__ == '__main__': app = QApplication(sys.argv) model_size = 100000 list = [] source_model = QStandardItemModel() horizontal_header_list = [ "First Column with spacing", "Second Column with spacing" ] source_model.setHorizontalHeaderLabels(horizontal_header_list) for i in range(model_size): first_item = QStandardItem("FancyTextNumber {}".format(i)) if i == 0: first_item.appendRow(add_child(2, 2)) second_item = QStandardItem("FancyRow2TextNumber {}".format(i)) if i % 2 == 0: first_item.setBackground(Qt.red) row = [first_item, second_item] source_model.invisibleRootItem().appendRow(row) list.append("FancyTextNumber {}".format(i)) # Needed by QMLModelViewClient role_names = { Qt.DisplayRole: QByteArray(b'_text'), Qt.BackgroundRole: QByteArray(b'_color') } source_model.setItemRoleNames(role_names) roles = [Qt.DisplayRole, Qt.BackgroundRole]