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_
アクセスできない からの戻り値を使用しています。