QTableWidget Integer

Estoy intentando insertar y mostrar enteros en mi QTableWidget. No se muestran. Funciona si lo convierto todo en cadenas, pero luego no puedo ordenar las columnas numéricamente, solo léxicamente (1, 10, 100, etc.). Esto está utilizando PyQt.

He intentado algunas de las soluciones sugeridas, usando QTableWidgetItem.setData (someRole, intValue), bu y luego nada en absoluto. He intentado, Qt.UserRole, DisplayRole y Edit Role. (No entiendo por qué se necesitan estos roles para mostrar enteros, pero solo he seguido los ejemplos). Mi código específico es:

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

El siguiente código funciona, pero solo para cadenas:

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

Además, las sugerencias para volver a leer los datos, solo muestran la ubicación del objeto, no los datos reales. Ejemplo, usando a Eric como intérprete:

item.data (Qt.DisplayRole)

    Respuesta: Objeto PyQt4.QtCore.QVariant en 0x1f01fa60

    o esto:

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

    Respuesta: objeto sip.voidptr en 0x1e904a80

    Cualquier apreciación es apreciada.

    Estabas en el camino correcto. Su código no funciona porque no está llamando a la QTableWidgetItem setData() , sino que intenta asignarle un valor. Tienes

     item.setData = (Qt.DisplayRole,intValue) 

    en lugar de

     item.setData(Qt.DisplayRole,intValue) 

    Además, al volver a leer los datos, no solo se muestra la ubicación, sino también los datos en sí como QVariant . Debe encontrar que item.data(Qt.DisplayRole).toString() devolverá sus datos como una cadena al convertir QVariant (a través de su método .toString() ).

    Aquí hay un ejemplo de trabajo rápido para demostrar:

     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_())