Я использую QFileDialog
в качестве редактора для некоторых столбцов в QTableView
. Это в основном работает (по модулю некоторых проблем с фокусом, см. здесь):
class DirectorySelectionDelegate(QStyledItemDelegate):
def createEditor(self, parent, option, index):
editor = QFileDialog(parent)
editor.setFileMode(QFileDialog.Directory)
editor.setModal(True)
return editor
def setEditorData(self, editor, index):
val = index.model().data(index, Qt.DisplayRole)
fs = val.rsplit(os.path.sep, 1)
if len(fs) == 2:
bdir, vdir = fs
else:
bdir = "."
vdir = fs[0]
editor.setDirectory(bdir)
editor.selectFile(vdir)
def setModelData(self, editor, model, index):
model.setData(index, editor.selectedFiles()[0])
def updateEditorGeometry(self, editor, option, index):
r = option.rect
r.setHeight(600)
r.setWidth(600)
editor.setGeometry(r)
Однако, когда редактор закрыт, я не вижу способа различить Choose
и Cancel
(или потерял фокус), функция setEditorData
вызывается во всех случаях. Я не вижу способа получить результат от QFileDialog
, который я получаю как editor
, все примеры, которые я могу найти, используют возвращаемое значение от exec_
, к которому у меня нет доступа.