QFileDialog просматривать папки и файлы, но выбирать только папки?

Я создаю свой собственный диалог с файлом, используя следующий код:

file_dialog = QtGui.QFileDialog()
file_dialog.setFileMode(QtGui.QFileDialog.Directory)
file_dialog.setViewMode(QtGui.QFileDialog.Detail)
file_dialog.setOption(QtGui.QFileDialog.DontUseNativeDialog, True)

Меня интересует поведение, позволяющее пользователю просматривать и файлы, и папки, но выбирать только папки. (делая файлы невыбираемыми). Это возможно?

Замечания: С использованиемDirectoryOnly опция мне не подходит, так как она не позволяет просматривать файлы, только папки.

редактировать (дополнительный код, который я забыл добавить, который отвечает за возможность выбора нескольких папок вместо одной):

file_view = file_dialog.findChild(QtGui.QListView, 'listView')
if file_view:
    file_view.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
f_tree_view = file_dialog.findChild(QtGui.QTreeView)
if f_tree_view:
    f_tree_view.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
 YaronGh28 июл. 2016 г., 19:18
это немного неловко, но я только что обнаружил, что за это отвечает другой фрагмент кода. это код, который позволяет мне выбирать несколько папок, а не только одну, но затем он делает это, одновременно вызывая проблему, о которой я упоминал. я отредактировал свой оригинальный пост с этим кодом.
 ekhumoro28 июл. 2016 г., 19:08
Для меня кнопка «Выбрать» становится активной только тогда, когда я выбираю каталоги. МожноВыбрать файлы, но не выбирайте их (потому что кнопка отключена).
 ekhumoro28 июл. 2016 г., 01:02
Код, который вы разместили, делает именно то, что вы говорите, то есть (то есть пользователь может просматривать файлы и директории, но только выбирать директории). Поэтому, возможно, вам нужно более четко объяснить, чего вы хотите достичь.
 YaronGh28 июл. 2016 г., 19:20
смотри мой последний комментарий;)
 YaronGh28 июл. 2016 г., 15:36
Не совсем ... приведенный выше код также позволяет вам выбирать файлы.

Ответы на вопрос(1)

Решение Вопроса

Чтобы предотвратить выбор файлов, вы можете установить модель прокси, которая управляет флагами для элементов в представлении файла:

class ProxyModel(QtGui.QIdentityProxyModel):
    def flags(self, index):
        flags = super(ProxyModel, self).flags(index)
        if not self.sourceModel().isDir(index):
            flags &= ~QtCore.Qt.ItemIsSelectable
        return flags


# keep a reference somewhere to prevent core-dumps on exit
self._proxy = ProxyModel(self)

file_dialog.setProxyModel(self._proxy)
 YaronGh29 июл. 2016 г., 00:41
Справедливо, спасибо!
 ekhumoro28 июл. 2016 г., 21:02
@YaronGh.file_dialog.setProxyModel(None).
 YaronGh28 июл. 2016 г., 21:15
Я пытаюсь выбрать файлы и папки, и диалоговое окно файлов возвращает пути к этим файлам и папкам.
 YaronGh28 июл. 2016 г., 21:07
Если я это сделаю, он возвращает выбранный файл + все другие файлы в этой папке
 YaronGh28 июл. 2016 г., 20:59
Хорошо, большое спасибо! Я не уверен, должен ли я открыть новый вопрос для этого или нет (дайте мне знать) - но есть ли быстрая модификация, которую я мог бы внести в мой код выше, чтобы иметь возможность выбирать как папки, так и файлы?
 ekhumoro28 июл. 2016 г., 21:40
@YaronGh. Это звучит каксовершенно другой вопрос.
 ekhumoro28 июл. 2016 г., 21:12
@YaronGh. Тебе придется объяснить гораздо более четко, что ты пытаешься сделать.

Ваш ответ на вопрос