3

我正在开发一个项目,我正在使用 Python 和 PyQT4 开发该项目。我偶然发现了 QFileDialog 的一个有点奇怪的行为,在我的 IDE (Eclipse) 中运行项目时不会发生这种行为。

问题是 ExistingFiles 模式下的 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 会按预期关闭。

4

2 回答 2

0
  1. 尝试使用 lambda x: x.toUtf8() 或 toLocal8Bit() 或将 TextCodec 设置为您想要的任何代码页,它应该会有所帮助。这些方法返回正确编码的 python 字符串。避免在 QString 上使用 str(),它不知道你想要的charmap。

  2. 什么是 getSelectedFiles()?在 QFileDialog 类的 Qt 4.5 或更高版本中没有这样的方法。我假设它是错字或一些旧的 Qt 版本,并在我的测试代码中将其更改为 selectedFiles() 。

  3. 为什么不使用 QFileDialog 的便捷方法进行文件选择:

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

?

于 2010-04-09T15:59:51.473 回答
0

您应该使用 unicode()(而不是 str())将 QString 转换为 Python unicode 字符串。

于 2010-05-17T00:48:38.543 回答