Я нашел решение для моего случая, основываясь на следующих предположениях: Эти три строки:
model.setRootPath(directory)
tree.setRootIndex(self.model.index(directory))
tree.setSortingEnabled(True)
Кажется, что они должны быть в указанном порядке c, и, конечно, корневой путь модели и Индекс дерева root должен указывать на один и тот же каталог (во время отладки я пытался установить их на разные, просто чтобы посмотреть, что происходит, когда дерево показывает только подмножество данных модели, но, как и ожидалось, оно сломало несколько вещей в приложение).
Кроме того, любые пользовательские строки (например, обработка пользовательских столбцов) должны происходить между настройкой индекса root и включением сортировки. Я не знаю, действительно ли это общее правило, оно кажется произвольным, но в моем проекте оказалось крайне важным вызвать setSortingEnabled () в качестве последнего шага, чтобы заставить его работать.
Если ваши пользовательские столбцы не содержат простой текст (или что-то непростое для сортировки, в моем случае это поле со списком) или они скрыты, вам лучше исключить этот столбец из сортировки. Это не обязательно, но для меня это привело к более быстрому времени отклика для других столбцов.