我正在开发一个项目,我正在使用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将按照假设关闭。
答案 0 :(得分:0)
尝试使用lambda x:x.toUtf8()或toLocal8Bit()或将TextCodec设置为您想要的任何代码页,它应该有所帮助。这些方法返回正确编码的python字符串。避免在QString上使用str(),它不知道你想要的charmap。
什么是getSelectedFiles()?在QFileDialog类的Qt 4.5或更高版本中没有这样的方法。我假设它是拼写错误或一些旧的Qt版本,并在我的测试代码中将其更改为selectedFiles()。
为什么不使用QFileDialog的便捷方法来选择文件:
getExistingDirectory() getOpenFileName() getOpenFileNames() 则GetSaveFileName()
答案 1 :(得分:0)
你应该使用unicode()(而不是str())将QString转换为Python unicode字符串。