使用PyQt5

时间:2018-02-15 18:38:48

标签: python-3.x pyqt5 file-format qfiledialog

我正在使用PyQt5创建一个应用程序。它打开一个Web浏览器,它应该允许用户下载文件。

看起来像这样:

import sys
from PyQt5 import QtWidgets,QtGui,QtCore
from PyQt5.QtWebEngineWidgets import *
from PyQt5 import QtWebChannel
from PyQt5.QtWidgets import *


def _downloadRequested(item): # QWebEngineDownloadItem
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    #
    global pathsave_custom
    pathsave_custom = QFileDialog.getSaveFileName(None, "Select destination folder and file name", "", "Zip files (*.zip)",
                                options=options)[0]
    print('downloading to', item.path())
    item.setPath(pathsave_custom)
    print('downloading to', item.path())
    print(item)
    print(type(item))
    item.accept()



app=QtWidgets.QApplication(sys.argv)
w=QWebEngineView()
w.page().fullScreenRequested.connect(QWebEngineFullScreenRequest.accept)
w.load(QtCore.QUrl('https://google.com'))
w.page().profile().downloadRequested.connect(_downloadRequested)
w.showMaximized()
app.exec_()

我想强制下载文件的格式。无论用户写什么,我都应该在下载文件的末尾选择一个扩展名。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

我明白了,我改变了这句话:

 item.setPath(pathsave_custom) 

使用:

item.setPath(pathsave_custom + '.zip') 

无论用户写什么,下载的文件都是ZIP。

答案 1 :(得分:0)

在您的情况下,您似乎总是添加 .zip 扩展名,即使用户已经放置了 `.zip。

如果没有扩展名或扩展名不是.zip,您可以执行以下操作并添加zip

from pathlib import Path

import sys
from PyQt5 import QtWidgets,QtGui,QtCore
from PyQt5.QtWebEngineWidgets import *
from PyQt5 import QtWebChannel
from PyQt5.QtWidgets import *

def _downloadRequested(item): # QWebEngineDownloadItem
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    #
    global pathsave_custom
    pathsave_custom = QFileDialog.getSaveFileName(None, "Select destination folder and file name", "", "Zip files (*.zip)",
                                options=options)[0]

    if not file_extension or file_extension != '.zip':
        pathsave_custom = pathsave_custom + '.zip'
        
    print('downloading to', item.path())
    item.setPath(pathsave_custom)
    print('downloading to', item.path())
    print(item)
    print(type(item))
    item.accept()