我使用 aQFileDialog
作为 a 中某些列的编辑器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_
我无权访问的返回值。