QFileDialog и немецкий умляут в пути - PullRequest
3 голосов
/ 06 апреля 2010

Я работаю над проектом, который я разрабатываю с Python и PyQT4. Я наткнулся на несколько странное поведение QFileDialog, которое не происходит при запуске проекта в моей IDE (Eclipse).

Проблема в том, что QFileDialog в режиме ExistingFiles не возвращает список выбранных файлов, когда один из путей к файлам содержит умлаут на немецком языке (ä, ü, ö и т. Д.) QFileDialog не предлагает опций или параметров, чтобы сделать его разумным в отношении этого сценария. У кого-нибудь есть идеи, как решить эту проблему?

edit: мой сценарий развертывания, в котором происходит ошибка, выглядит следующим образом. я строю исполняемый файл с 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 голосов
/ 17 мая 2010

Вы должны использовать unicode () (не str ()) для преобразования QString в строки Unicode Python.

0 голосов
/ 09 апреля 2010
  1. Попробуйте использовать lambda x: x.toUtf8 () или toLocal8Bit () или установите TextCodec на любую кодовую страницу, какую хотите, это должно помочь. Эти методы возвращают правильно закодированные строки Python. Избегайте использования str () в QString, он не знает о нужной вам charmap.

  2. Что такое getSelectedFiles ()? В Qt 4.5 и выше в классе QFileDialog такого метода нет. Я предположил, что это была опечатка или какая-то старая версия Qt, и изменил ее на selectedFiles () в моем тестовом коде.

  3. Почему бы вам не использовать удобные методы QFileDialog для выбора файла:

    getExistingDirectory () GetOpenFileName () getOpenFileNames () GetSaveFileName ()

...