tl; dr
Использование self.model.setData(index, datadialog.choice, QtCore.Qt.DisplayRole)
.
Объяснение
Давайте посмотрим аргументы setItem()
:
QStandardItemModel.setItem(row, column, item)
Можно указать только строку и столбец. Как модель должна знать, хотите ли вы установить элемент child ? И потомок чего?
setItem()
работает только для двумерных моделей данных (или таблиц), но вы используете модель в виде дерева, что означает, что каждый индекс может иметь свои собственные дочерние индексы (каждый из которых имеет свою строку и столбец относительно своего родителя).
То, что вы получаете от index.row()
и index.column()
, относится к координатам относительно индекса parent()
.
В вашем случае выделенный элемент находится в строке 1 и столбце 1, поэтому использование setItem()
приведет к установке элемента во второй строке и столбце модели root (при условии, что элемент существует в этих координатах).
Использование setData
позволяет установить данные для указанного индекса c, поскольку для этого используются три его координаты: строка, столбец и parent . Обратите внимание, что аргумент QtCore.Qt.DisplayRole
является обязательным, потому что по умолчанию QStandardItemModel использует EditRole
.