from PySide2 import QtWidgets, QtGui, QtCore, __version_info__

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.treeView = QtWidgets.QTreeView(self)
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.treeView)
        button = QtWidgets.QPushButton('Add Row')
        button.clicked.connect(self.buttonClick)
        layout.addWidget(button)
        self.setLayout(layout)
        self.treeView.setModel(QtGui.QStandardItemModel())
        crash = True
        if crash:
            self.treeView.setItemDelegateForColumn(0, QtWidgets.QStyledItemDelegate())
            print(self.treeView.itemDelegateForColumn(0))
        else:
            delegate = QtWidgets.QStyledItemDelegate()
            self.treeView.setItemDelegateForColumn(0, delegate)
            print(self.treeView.itemDelegateForColumn(0)) # It will still crash if this isn't here...
        self.treeView.model().setHorizontalHeaderLabels(('1', '2', '3'))

    @QtCore.Slot()
    def buttonClick(self):
        self.treeView.model().appendRow((QtGui.QStandardItem('1'), QtGui.QStandardItem('2'), QtGui.QStandardItem('3')))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    print(__version_info__, QtCore.qVersion())
    widget = Widget()
    widget.show()
    sys.exit(app.exec_())
