[英]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.