几天来我一直面临一个问题。我正在使用 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 不会更新。
您对如何获得最终版本信号有任何想法吗?
(请原谅我的英语,我是法国人……)