如何解决 QFileDialog 的过滤参数问题?

Posted

技术标签:

【中文标题】如何解决 QFileDialog 的过滤参数问题?【英文标题】:How to solve an issue with QFileDialog's filter parameter? 【发布时间】:2019-01-06 21:30:22 【问题描述】:

我想创建一个文件对话框,使用 QFileDialog 来选择要在 QMediaPlayer 中设置的音频文件,文件扩展名掩码 (*.mp3, *.ogg、*.flac)。 不幸的是,它不起作用,因为它应该将最后一个扩展名作为过滤器属性。

我在 PyQt5 和 PySide2 上试过这个,结果是一样的。它在过滤器列表中显示具有最新扩展名的文件,例如仅 *.mp3 或 *.flac

audioFormats = "*.mp3, *.wav, *.ogg, *.wma, *.flac"
print(f"these are formats: audioFormats")
self.track, _ = self.getOpenFileName(parent=self, caption="Set track file", filter=f"Audio files (audioFormats)")

我希望它能显示带有所有这些扩展名的文件。

【问题讨论】:

【参考方案1】:

正如the example of the docs 所指出的,您不应使用逗号分隔扩展名:

from PyQt5 import QtWidgets

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    audioFormats = "*.mp3 *.wav *.ogg *.wma *.flac" # without commas
    filename, _ = QtWidgets.QFileDialog.getOpenFileName(parent=None, 
        caption="Set track file",
        filter=audioFormats)
    if filename:
        print(filename)

【讨论】:

以上是关于如何解决 QFileDialog 的过滤参数问题?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Python 2.7、PyQt 4.11 和 Windows 7 64 位为 QFileDialog 设置默认过滤器

如何让 QFileDialog 提示覆盖?

如何以编程方式关闭 QFileDialog?

如何解决POST请求参数中文乱码问题

在 Qt 中如何在 QLineEdit 中添加带有 QFileDialog 的文件

如何在pyside中为QtGui.QFileDialog.getOpenFileName定义一个QDir?