else: child.setText(level, str(val)) child.setExpanded(True) else: child = QTreeWidgetItem() child.setText(level, str(value)) item.addChild(child) def fill_widget(widget, value): widget.clear() fill_item(widget.invisibleRootItem(), value, 0) app = QtGui.QApplication.instance() if app is None: app = QtGui.QApplication(sys.argv) d = { 'key1': 'value1', 'key2': 'value2', 'sub_list': [1,2,3, ['good', 'test'], {'abc': 3, 'cde': 9}], 'key4': object(), 'sub_dict': {'key1': 'value1', 'key2': 'value2'}} widget = QTreeWidget() widget.setHeaderLabels(['level0', 'level1', 'level2', 'level3']) fill_widget(widget, d) widget.show() sys.exit(app.exec_())