5

我正在尝试在我的 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)

此外,回读数据的建议仅显示对象位置,而不是实际数据。例如,使用 Eric 作为解释器外壳:

item.data(Qt.DisplayRole)

响应: PyQt4.QtCore.QVariant 对象位于 0x1f01fa60

或这个:

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

响应:0x1e904a80 处的 sip.voidptr 对象

任何见解都值得赞赏。

4

1 回答 1

12

你走在正确的轨道上。您的代码不起作用,因为您没有调用QTableWidgetItem'setData()函数而是试图为其分配一个值。你有

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_())
于 2012-10-26T12:59:01.547 回答