QFileDialog 和路径中的德语变音符号

3 投票
2 回答
1531 浏览
提问于 2025-04-15 21:17

我正在做一个项目,使用Python和PyQT4开发。在这个过程中,我遇到了QFileDialog的一个奇怪问题,这个问题在我使用的IDE(Eclipse)中运行项目时并没有出现。

问题是,当我选择的文件路径中包含德语的变音字母(比如ä、ü、ö等)时,QFileDialog在“现有文件”模式下无法返回所选文件的列表。QFileDialog没有提供任何选项或参数来处理这种情况。有没有人知道该怎么解决这个问题?

补充说明:我遇到这个错误的部署场景是这样的。我使用Py2Exe构建一个可执行文件,然后用Inno Setup进行分发。我不知道这是否导致了问题,但我觉得提供更多信息总是好的。

补充说明2:我到周五之前无法访问确切的代码,但我们有一个if语句在等待对话框完成。像这样:

fileDialog = QFileDialog(...)
if fileDialog.exec_():
    # get the choosen files
    fileNames = fileDialog.getSelectedFiles()
    # test if if-statement is entered
    print fileNames
    # convert from QStringList to normal list of Strings
    fileNames = list(map(lambda x: str(x), fileNames))
    # to suffice as an example print each
    for fileName in fileNames:
        print fileName

第一个打印命令会执行,而第二个不会。就好像中间有某个东西不愿意结束,而Python在某种程度上安静地处理了这个异常。不过,QFileDialog在选择文件并点击“打开”或双击文件后是按预期关闭的。

2 个回答

0

你应该使用unicode()(而不是str())来把QString转换成Python的unicode字符串。

0
  1. 试试用 lambda x: x.toUtf8(),或者 toLocal8Bit(),或者把 TextCodec 设置成你想要的编码,这样应该会有帮助。这些方法能返回正确编码的 Python 字符串。尽量不要对 QString 使用 str(),因为它不知道你想要的字符编码。

  2. 什么是 getSelectedFiles()?在 Qt 4.5 或更高版本的 QFileDialog 类中没有这个方法。我猜这可能是个打字错误或者是旧版 Qt 的东西,所以我在测试代码中把它改成了 selectedFiles()。

  3. 为什么不使用 QFileDialog 提供的方便方法来选择文件呢:

    getExistingDirectory()
    getOpenFileName()
    getOpenFileNames()
    getSaveFileName()

?

撰写回答