QTableView + QFileSystemModel 在 setSortingEnabled(True) 时不排序
QTableView + QFileSystemModel not sorting when setSortingEnabled(True)
考虑以下代码段:
import sys
import os
import time
from PyQt5.Qt import * # noqa
class Foo(QTableView):
def __init__(self, path, extensions, parent=None):
super().__init__(parent)
model = QFileSystemModel(self)
model.setRootPath(QDir.rootPath())
model.setFilter(QDir.NoDotAndDotDot | QDir.Files)
model.setNameFilterDisables(False)
self.setModel(model)
self.setShowGrid(False)
self.verticalHeader().hide()
self.setSelectionBehavior(QAbstractItemView.SelectRows)
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
self.setSelectionMode(QAbstractItemView.SingleSelection)
self.change_path(path)
self.setSortingEnabled(True)
def change_path(self, path):
model = self.model()
index = model.index(str(path))
self.setRootIndex(model.index(os.path.dirname(str(path))))
self.scrollTo(index)
self.setCurrentIndex(index)
def main():
app = QApplication(sys.argv)
file_view = Foo(__file__, ["*.*"])
file_view.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
出于某种原因,当我单击 headers 时,行不会被排序,这是为什么?
文档说:
void QTableView::setSortingEnabled(bool enable) If enable is true,
enables sorting for the table and immediately trigger a call to
sortByColumn() with the current sort section and order
Note: Setter function for property sortingEnabled. See also isSortingEnabled().
这种情况下的主要问题是 QDir.rootPath()
默认给出 C:/
并且我使用的初始路径位于 D:
,所以要让它工作您需要确保 setRootPath 将匹配初始路径:
即:将 model.setRootPath(QDir.rootPath())
更改为 model.setRootPath('D:/')
,它会正常工作。或者更好的是,从初始路径中提取字母,这样您就不会对任何内容进行硬编码。
考虑以下代码段:
import sys
import os
import time
from PyQt5.Qt import * # noqa
class Foo(QTableView):
def __init__(self, path, extensions, parent=None):
super().__init__(parent)
model = QFileSystemModel(self)
model.setRootPath(QDir.rootPath())
model.setFilter(QDir.NoDotAndDotDot | QDir.Files)
model.setNameFilterDisables(False)
self.setModel(model)
self.setShowGrid(False)
self.verticalHeader().hide()
self.setSelectionBehavior(QAbstractItemView.SelectRows)
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
self.setSelectionMode(QAbstractItemView.SingleSelection)
self.change_path(path)
self.setSortingEnabled(True)
def change_path(self, path):
model = self.model()
index = model.index(str(path))
self.setRootIndex(model.index(os.path.dirname(str(path))))
self.scrollTo(index)
self.setCurrentIndex(index)
def main():
app = QApplication(sys.argv)
file_view = Foo(__file__, ["*.*"])
file_view.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
出于某种原因,当我单击 headers 时,行不会被排序,这是为什么?
文档说:
void QTableView::setSortingEnabled(bool enable) If enable is true, enables sorting for the table and immediately trigger a call to sortByColumn() with the current sort section and order Note: Setter function for property sortingEnabled. See also isSortingEnabled().
这种情况下的主要问题是 QDir.rootPath()
默认给出 C:/
并且我使用的初始路径位于 D:
,所以要让它工作您需要确保 setRootPath 将匹配初始路径:
即:将 model.setRootPath(QDir.rootPath())
更改为 model.setRootPath('D:/')
,它会正常工作。或者更好的是,从初始路径中提取字母,这样您就不会对任何内容进行硬编码。