2017-02-12 31 views
0

Если я построить QStandardItem как так:PyQt5: Установка данных для QStandardItem

item = QtGui.QStandardItem('Item Name') 

Когда этот элемент добавляется к QStandardItemModel модели и рассматривается в QTreeView я получаю ячейку, которая говорит Item Name. Однако, когда я построить один, как:

item = QtGui.QStandardItem() 
item.setData(123) 

Я получаю пустую клетку, но я до сих пор могу вспомнить данные по телефону:

print(item.data()) 

и я получить номер 123. Как я могу получить номер для фактического отображения в ячейке?

+0

'item.setData (str (123))'. – ekhumoro

+0

Мне нужно, чтобы это было редактируемое число, и я не могу полагаться на строку, чтобы плавать конверсии. Я не понимаю, почему, если я устанавливаю данные непосредственно из модели: 'model.setData (model.index (0,1), 123.987)' он покажет номер, но если я сделаю это на 'QStandardItem', он выиграл «т. – NineTails

+0

Также я попробовал ваше предложение, и оно тоже не работает. Вы хотите, чтобы я вставлял запускаемую примерную программу? Я просто подумал, что это может быть слишком много для вопроса, если это был простой ответ. – NineTails

ответ

1

Аргумент, переданный конструктору QStandardItem, устанавливает данные для DisplayRole. Таким образом, эквивалентный метод будет либо:

item.setData(str(123), QtCore.Qt.DisplayRole) 

или:

item.setText(str(123)) 

Но если вы хотите хранить данные в Orignal типа данных, а не превращение его в строку первых, вы можете используйте QStyledItemDelegate для управления отображением необработанных данных:

class ItemDelegate(QStyledItemDelegate): 
    def displayText(self, value, locale): 
     if isinstance(value, float): 
      return '%08f' % value 
     return value 

view.setItemDelegate(ItemDelegate(view))