5

QTableWidgetに整数を挿入して表示しようとしています。表示されません。すべてを文字列に変換すると機能しますが、列を数値で並べ替えることはできません。字句(1、10、100など)でのみ並べ替えることができます。これはPyQtを使用しています。

QTableWidgetItem.setData(someRole、intValue)を使用して、提案された解決策のいくつかを試しましたが、何も表示されません。Qt.UserRole、DisplayRole、EditRoleを試しました。(整数を表示するためにこれらのロールが必要な理由はわかりませんが、例に従っただけです)。私の特定のコードは次のとおりです。

    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)

応答:0x1f01fa60のPyQt4.QtCore.QVariantオブジェクト

またはこれ:

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

応答:0x1e904a80のsip.voidptrオブジェクト

任意の洞察をいただければ幸いです。

4

1 に答える 1

12

あなたは正しい軌道に乗っていました。QTableWidgetItemsetData()関数を呼び出すのではなく、値を割り当てようとしているため、コードは機能しません。あなたが持っている

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 に答える