QTableWidget Integer

Я пытаюсь вставить и отобразить целые числа в моем QTableWidget. Они не отображаются. Он работает, если я конвертирую все в строки, но тогда я не могу сортировать столбцы численно – только лексически (1, 10, 100 и т. Д.). Это использует PyQt.

Я пробовал некоторые из предлагаемых решений, используя QTableWidgetItem.setData (someRole, intValue), bu, тогда ничего не отображается. Я пробовал, Qt.UserRole, DisplayRole и Edit Role. (Я не понимаю, почему эти Роли необходимы для отображения целых чисел, но только последовали за примерами). Мой специальный код:

item = QTableWidgetItem() item.setData = (Qt.DisplayRole,intValue) myTable.setItem(row, column, item) 

Следующий код работает, но только для строк:

  item = QTableWidgetItem(str(intValue)) myTable.setItem(row, column, item) 

Кроме того, предложения по чтению данных назад показывают только местоположение объекта, а не фактические данные. Например, используя Эрик как оболочку интерпретатора:

item.data (Qt.DisplayRole)

Ответ: объект PyQt4.QtCore.QVariant на 0x1f01fa60

или это:

item.data (Qt.EditRole) .data ()

Ответ: объект sip.voidptr на 0x1e904a80

Любое понимание очень ценится.

One Solution collect form web for “QTableWidget Integer”

Вы были на правильном пути. Ваш код не работает, потому что вы не вызываете функцию setData() QTableWidgetItem но пытаетесь присвоить ему значение. У тебя есть

 item.setData = (Qt.DisplayRole,intValue) 

вместо

 item.setData(Qt.DisplayRole,intValue) 

Кроме того, при чтении данных назад это не только отображаемое местоположение, но и данные как QVariant . Вы должны найти, что item.data(Qt.DisplayRole).toString() вернет ваши данные назад в виде строки, преобразовывая QVariant (через метод .toString() ).

Вот пример для быстрого демонстрации:

 import sys from PyQt4.QtGui import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout from PyQt4.QtCore import Qt class Widget(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.widget_layout = QVBoxLayout() self.table_widget = QTableWidget(101, 1) self.table_widget.setSortingEnabled(True) self.widget_layout.addWidget(self.table_widget) self.setLayout(self.widget_layout) for num in xrange(101): item = QTableWidgetItem() item.setData(Qt.EditRole, num) self.table_widget.setItem(num, 0, item) if __name__ == '__main__': app = QApplication(sys.argv) widget = Widget() widget.show() sys.exit(app.exec_()) 
Python - лучший язык программирования в мире.