QFileDialog和德语在一条路径中的变元

时间:2010-04-06 14:41:46

标签: python path pyqt pyqt4 diacritics

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

问题是,当其中一个文件路径包含德语变音符号(ä,ü,ö等)时,ExistingFiles模式下的QFileDialog无法返回所选文件列表 QFileDialog不提供选项或参数,以使其在这种情况下更明智。 有没有人对如何解决这个问题有任何想法?

编辑:发生错误的部署方案如下所示。我正在使用Py2Exe构建一个可执行文件,然后使用Inno Setup进行分发。不知道这是否可能产生了这个问题,但我认为越多的信息越好。

EDIT2:     我没有确切的代码可以访问,直到星期五,但我们有一个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 :(得分: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()

答案 1 :(得分:0)

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