私はここ数日問題に直面しています。QTableViewを使用してモデルのデータを表示しています。ユーザーがセルをクリックしたときに完全な行選択をアクティブにして、インターフェイスをユーザーフレンドリーにしました:self.tableau.selectRow(element.row())
ただし、ユーザーがF2を押したときに、列1のみを編集したいと思います。したがって、予想される動作は次のとおりです。
- 列4を選択した場合、これは編集できません
- 列4を選択したときにF2を押すと、列1が編集されます。
しかし、完全な行選択では、F2はどのセルが選択されているかを知ることができません。そこで、イベントハンドラーを再実装しました。
def keyPressEvent(self, e):
"""It reimplements event management in this method """
# TODO: find a way to re-select the cell after editing
# We get the name of current file
nom_courant = self.tableau.model().index(self.row_selected, 1).data()
print(nom_courant)
if e.key() == QtCore.Qt.Key_F2:
try:
# We edit the cell name of the selected line
#http://stackoverflow.com/questions/8157688/specifying-an-index-in-qtableview-with-pyqt
self.tableau.edit(self.tableau.model().index(self.row_selected, 1))
except:
print("Pas de cell sélectionnée")
pass
# It retrieves the new file name. CAN NOT do in the
# if the model is not updated yet.
nouveau_nom = self.tableau.model().index(self.row_selected, 1).data()
print(nouveau_nom)
# Call the fct renaming only if the name has changed
if nom_courant != nouveau_nom:
#liste.renameFile(self.current_video, self.tableau.model().index(self.row_selected, 1).data())
print("entropie")
今の問題はこの行です:
self.tableau.edit(self.tableau.model().index(self.row_selected, 1))
生成されたQLineEditのエディションの終了を検出する方法がありません。キーボードイベントが発生しない場合、nouveau_nomは更新されないため、編集されたセルの新しいコンテンツに対してアクションを実行する必要があります。
最終版のシグナルを取得する方法についてのアイデアはありますか?
(私の英語を許してください、私はフランス語です...)