2014-11-14 85 views
0

在新应用中使用小部件来提供当前目录中的文件列表。它可以工作,但启动操作非常慢,无论何时在目录树中上下移动,新目录的更新和显示也很慢。由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)) 
+0

你在哪个平台上?在Linux上适合我。有大约5000个条目的文件夹加载时间不到一秒,整体性能比专用文件管理器应用程序(可能是因为图标)要好一些。 – ekhumoro 2014-11-14 17:39:23

+0

我在Windows 7上。这很奇怪,因为我看不到任何延迟的好理由。我也在使用少于100个文件的目录。 – mrkbutty 2014-11-17 10:51:27

回答

0

我认为这是PySide和QFileSystemModel本身。

即时通讯使用PySide 1.2.1与QtCore 4.8.6,我发现今天没有任何改变这个代码的区域工作正常,然后再次恢复到慢操作。我想我可能会考虑为视图创建我自己的更简单的模型,或尝试使用PyQt4。

+0

如果Windows上存在QFileSystemModel的基本问题,我期望找到许多人抱怨它。但尽管有些搜索可以找到一些相关的错误报告,但并没有真正的确定性。这导致我怀疑你的系统设置有可能暴露出问题的不寻常之处。你能够在其他一些Windows机器上测试吗?我在一台虚拟机上用Win XP试过,'windows/system32'文件夹只需要大约一秒左右的时间来加载。 – ekhumoro 2014-11-18 18:17:16