であるとき、次のように私はQTableViewを作成QTableViewは編集してください(これは自動的にQtのデザイナーによって生成された部分があります)モデルは私のGUIファイルでパンダのデータフレーム
class PandasModel(QtCore.QAbstractTableModel):
"""
Class to populate a table view with a pandas dataframe
"""
def __init__(self, data, parent=None):
QtCore.QAbstractTableModel.__init__(self, parent)
self._data = data
def rowCount(self, parent=None):
return len(self._data.values)
def columnCount(self, parent=None):
return self._data.columns.size
def data(self, index, role=QtCore.Qt.DisplayRole):
if index.isValid():
if role == QtCore.Qt.DisplayRole:
return str(self._data.values[index.row()][index.column()])
return None
def headerData(self, col, orientation, role):
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
return self._data.columns[col]
return None
def setData(self, index, value, role):
if not index.isValid():
return False
if role != QtCore.Qt.EditRole:
return False
row = index.row()
if row < 0 or row >= len(self._data.values):
return False
column = index.column()
if column < 0 or column >= self._data.columns.size:
return False
self._data.values[row][column] = value
self.dataChanged.emit(index, index)
return True
def flags(self, index):
flags = super(self.__class__,self).flags(index)
flags |= QtCore.Qt.ItemIsEditable
flags |= QtCore.Qt.ItemIsSelectable
flags |= QtCore.Qt.ItemIsEnabled
flags |= QtCore.Qt.ItemIsDragEnabled
flags |= QtCore.Qt.ItemIsDropEnabled
return flags
をし、最終的にモデルに私のパンダのデータフレーム(DF)を追加します:QTableViewにパンダのデータフレームをリンクする
model = PandasModel(df)
self.ui.pnl_results.setModel(model)
QTableViewにパンダのデータフレームが正しく表示されます。しかし、何らかの理由で私がfiledsを元の値に戻したときに編集します(また、フィールドを編集すると空になる)。それを編集可能にして、その結果をパンダのデータフレームに書き戻すにはどうしたらいいですか?
setDataメソッドをどのようにして表示する必要がありますか? – Nickpick
[OK]をクリックして、実装例を追加しました。 – Dmitry
私の質問を最新のバージョンに変更しました。問題は、編集したファイルがデータフレームに伝播しないように見えて、入力した値が元の値に戻されたということです。 – Nickpick