在新应用中使用小部件来提供当前目录中的文件列表。它可以工作,但启动操作非常慢,无论何时在目录树中上下移动,新目录的更新和显示也很慢。由QTableView使用的PySide QFileSystemModel的缓慢操作
下面是用于应用程序的文件资源管理器部分的类;
class FileList(QFrame):
def __init__(self, parent=None):
super(FileList, self).__init__(parent)
# self.setFrameStyle(self.WinPanel|self.Raised)
lo50 = QVBoxLayout(self)
lo50.setContentsMargins(0, 0, 0, 0)
self.setLayout(lo50)
self.cwdtext = QLineEdit(self)
self.cwdtext.setReadOnly(True)
lo50.addWidget(self.cwdtext)
self.list = QTableView(self)
self.list.setSortingEnabled(True)
self.list.setShowGrid(False)
self.list.setWordWrap(False)
self.list.setCornerButtonEnabled(False)
vh = self.list.verticalHeader()
vh.hide()
vh.setDefaultSectionSize(20)
self.filemodel = QFileSystemModel(self)
self.filemodel.setFilter(QDir.AllDirs | QDir.Files | QDir.NoDot | QDir.Drives | QDir.AllEntries)
self.filemodel.setNameFilterDisables(False)
self.list.setModel(self.filemodel)
lo50.addWidget(self.list)
self.chdir(QDir.currentPath())
self.list.doubleClicked.connect(self.doubleclick)
def chdir(self, directory):
newdir = obj2str(directory)
i = self.filemodel.setRootPath(newdir)
self.list.setRootIndex(i)
cwd = os.path.abspath(newdir)
os.chdir(cwd)
self.cwdtext.setText(cwd)
return i
def doubleclick(self, index):
if self.filemodel.isDir(index):
self.chdir(self.filemodel.filePath(index))
else:
print(self.filemodel.filePath(index))
你在哪个平台上?在Linux上适合我。有大约5000个条目的文件夹加载时间不到一秒,整体性能比专用文件管理器应用程序(可能是因为图标)要好一些。 – ekhumoro 2014-11-14 17:39:23
我在Windows 7上。这很奇怪,因为我看不到任何延迟的好理由。我也在使用少于100个文件的目录。 – mrkbutty 2014-11-17 10:51:27