解決策は、デリゲートを使用して、通常の状態で表示されるものを表示するためのペイントメソッドをオーバーライドすることです。私は上記に基づいて次のクラスを作成しました。
self.TableWidget.setItemDelegate(FloatDelegate(3))
例:
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = QTableWidget()
w.setColumnCount(8)
w.setRowCount(8)
for i in range(w.rowCount()):
for j in range(w.columnCount()):
number = (i+1)/(j+1)
w.setItem(i, j, QTableWidgetItem(str(number)))
w.setItemDelegate(FloatDelegate(3, w))
w.show()
sys.exit(app.exec_())
スクリーンショットを次のようにあなたのケースでは
class FloatDelegate(QItemDelegate):
def __init__(self, decimals, parent=None):
QItemDelegate.__init__(self, parent=parent)
self.nDecimals = decimals
def paint(self, painter, option, index):
value = index.model().data(index, Qt.EditRole)
try:
number = float(value)
painter.drawText(option.rect, Qt.AlignLeft, "{:.{}f}".format(number, self.nDecimals))
except :
QItemDelegate.paint(self, painter, option, index)
あなたはそれを使用する必要があります
プラス:
行O列で:
#only column 2
setItemDelegateForColumn(2, FloatDelegate(3))
#only row 2
setItemDelegateForRow(2, FloatDelegate(3))
あなただけの2,3
def paint(self, painter, option, index):
if index.row() == 2 and index.column() == 3:
value = index.model().data(index, Qt.EditRole)
try:
number = float(value)
painter.drawText(option.rect, Qt.AlignLeft, "{:.{}f}".format(number, self.nDecimals))
except :
QItemDelegate.paint(self, painter, option, index)
else:
QItemDelegate.paint(self, painter, option, index)
クールは理にかなっているのセルに適用したい場合。セルが空白の場合はどうなりますか?それはプログラムをクラッシュさせます。また、テーブル全体だけでなく、特定のセルで.setItemDelegateできますか? – dre
あなたが与えたコードをテストしたところで、それでもクラッシュしましたが、セル内にあるものを削除してクラッシュするまでは問題ありません。 – dre
https://drive.google.com/file/d/0BzcHlfStubD3UmJIeUdVT1NwTGs/view?usp=sharing – dre