簡體   English   中英

PyQt QFileDialog exec_ 很慢

[英]PyQt QFileDialog exec_ is slow

我使用自定義QFileDialog因為我想選擇多個目錄。 但是exec_函數很慢,我不知道為什么。 我正在使用最新版本的 PyQt。

代碼片段:

from PyQt4 import QtGui, QtCore, QtNetwork, uic

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        uic.loadUi('gui.ui', self)            
        self.connect(self.multiPackerAddDirsBtn,
                     QtCore.SIGNAL('clicked()'), self.multiPackerAddDirs)

    def multiPackerAddDirs(self):
        dialog = QtGui.QFileDialog(self)
        dialog.setFileMode(QtGui.QFileDialog.Directory)
        dialog.setOption(QtGui.QFileDialog.ShowDirsOnly, True)
        dialogTreeView = dialog.findChild(QtGui.QTreeView)
        dialogTreeView.setSelectionMode(
            QtGui.QAbstractItemView.ExtendedSelection)
        if dialog.exec_():
            for dirname in dialog.selectedFiles():
                self.multiPackerDirList.addItem(str(dirname))
                print(str(dirname))

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

QFileDialog構造函數創建一個 Qt 對話框,而靜態函數(如getSaveFileName )將創建一個本機對話框(除非DontUseNativeDialog選項設置為True )。

本機對話框可能比 Qt 更快或更慢,具體取決於所使用的平台。

但是,對於某些平台,問題似乎更為嚴重。 請參閱這個長期存在的錯誤,它會影響 Windows XP 和 Windows 7(以及其他)與 Qt 4.7 / 4.8。

更新

只是要清楚:

在 Windows 上,靜態函數QFileDialog.getExistingDirectory打開本機“瀏覽文件夾”對話框,它只允許選擇單個目錄。 因此 Qt 無法提供用於選擇多個目錄的本機對話框,因為 Windows 沒有提供。

另一種主要的替代方法是使用 Qt 自己的非本地文件對話框並按照此 faq 中的建議對其進行猴子補丁。 但是,正如您已經發現的那樣,由於底層實現中的錯誤,這目前具有令人討厭的緩慢的顯着缺點。

剩下的唯一選擇是要么編寫自己的目錄列表對話框,要么嘗試想出另一種方法來解決您當前的問題(即不使用文件對話框)。

我在默認的 Qt 文件瀏覽器對話框中的性能非常低。 列出目錄需要約 5 秒,選擇文件需要約 3 秒。 添加“DontUseNativeDialog”選項完全解決了我的問題。

file_path = QtGui.QFileDialog.getSaveFileName( self, 'Title', path, "", "", QtGui.QFileDialog.DontUseNativeDialog )
print file_path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM