通过 QFileDialog 下载/保存图像

Posted

技术标签:

【中文标题】通过 QFileDialog 下载/保存图像【英文标题】:Image download/save through QFileDialog 【发布时间】:2019-09-24 16:52:55 【问题描述】:

我搜索了但我找不到解决方案,请可怜我。我想下载一个图像并通过 PyQt5 中的 QFileDialog 决定保存位置。

首先我下载带有模块请求的文件:

url = 'https://landscape.jpg'
r = requests.get(url)
image = r.content

...然后是代码的另一部分,QFileDialog:

options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getSaveFileName(self,"Save Image","H:\Image","All Files (*)",options=options)

在 QFileDialog 语句中我应该在哪里放置图像变量?

【问题讨论】:

正如 eyllanesc 指出的那样(下) QFileDialog 不保存文件,但它不仅可以为您提供文件名,它还可以返回目录的路径,然后您可以在保存操作中使用该路径来保存文件。但它的主要目的是为用户提供一个允许他们遍历目录树的界面,并且您似乎已经知道要将文件放在哪里,因此您不需要 QFileDialog。事实上,如果你没有与此相关的 Gui,那么你根本不需要 pyqt,并且可以在直接 python 中完成所有这些 【参考方案1】:

QFileDialog 只是一个允许你获取文件名的小部件,不知道如何保存任何文件,你应该使用 open() 和 write() 将其保存为任何文件:

url = "https://landscape.jpg"
r = requests.get(url)
image = r.content

options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getSaveFileName(
    self, "Save Image", r"H:\Image", "All Files (*)", options=options
)

if fileName:
    with open(fileName, "wb") as f:
        f.write(image)

【讨论】:

我很失望! “H:\Image”前面的 r 是什么意思?谢谢。 @Nepura 原始字符串,阅读docs.python.org/3/reference/lexical_analysis.html 了解更多信息

以上是关于通过 QFileDialog 下载/保存图像的主要内容,如果未能解决你的问题,请参考以下文章

QFileDialog 不发出信号

需要用 QFileDialog 保存一个新文件

QFileDialog - 用指定的文件名保存文件

使用 opencv 和 Qt 使用 QFileDialog::getOpenFileName 打开图像

QFileDialog::getSaveFileName() 在文件对话框中点击保存后返回一个空字符串

Python PyQt4 QFileDialog 图像并在 QListWidget 中加载