Форум сайта python.su
0
Для заполнения форм из базы данных я использовал sqlalchemy ORM и переопределенную QAbstractTableModel отсюда Combobox у меня заполняется данными из базы данных, но в консоли постоянно пишет ошибку TypeError: PyQt4.QtCore.QVariant represents a mapped type and cannot be instantiated, которая возникает в этом методе класса модели:
def data(self, index, role=Qt.DisplayRole): if not index.isValid(): return QVariant() elif role not in (Qt.DisplayRole, Qt.EditRole): return QVariant() row = self.results[index.row()] name = self.fields[index.column()][2] return getattr(row, name)
Офлайн
186
> Что это и как с этим бороться?
Не возвращать QVariant. Это же очевидно.
Офлайн
0
Не возвращать QVariant.А как? Я не могу найти, где устанвливаются Qt.DisplayRole. Запрос по документации Qt выдает в основном ссылки на этот самый метод data где один из параметров - role.
Офлайн
186
Там всё очень просто. Qt запрашивает данные у модели через метод data, а для чего он их использует передаётся через параметр role и в зависимости от этого параметра нужно отдавать разные данные:
def data(self, idx, role=QtCore.Qt.DisplayRole): if idx.isValid(): if role == QtCore.Qt.DisplayRole: return u"Текст для отображения на экране" elif role == QtCore.Qt.FontRole: return QtGui.QFont( ... ) elif role == QtCore.Qt.ToolTipRole: return u"Текст для подсказки"
Отредактировано Rodegast (Май 19, 2017 10:54:54)
Офлайн