QFileDialog возвращает выбранный файл с неверными разделителями

Я заметил, что экземпляр QFileDialog возвращает абсолютные пути для функции-члена selectedFile(), у которой неправильный разделитель для данной операционной системы. Это не ожидается на кроссплатформенном языке (Python)

Что я должен сделать, чтобы исправить это, чтобы остальная часть моего должным образом независимого от ОС кода Python, использующего 'os.sep', была правильной? Я не хочу вспоминать, где я могу и не могу это использовать.

2 ответа

Решение

Ответ пришел из другого потока ( ЗДЕСЬ), в котором упоминалось, что мне нужно использовать QDir.toNativeSeparators()

поэтому я сделал следующее в своем цикле (что, вероятно, должно быть сделано в самом pyqt для нас):

def get_files_to_add(some_directory):
  addq = QFileDialog()
  addq.setFileMode(QFileDialog.ExistingFiles)
  addq.setDirectory(some_directory)
  addq.setFilter(QDir.Files)
  addq.setAcceptMode(QFileDialog.AcceptOpen)
  new_files = list()
  if addq.exec_() == QDialog.Accepted:
    for horrible_name in addq.selectedFiles():
      ### CONVERSION HERE ###
      temp = str(QDir.toNativeSeparators(horrible_name)
      ### 
      # temp is now as the os module expects it to be
      # let's strip off the path and the extension
      no_path = temp.rsplit(os.sep,1)[1]
      no_ext = no_path.split(".")[0]
      #... do some magic with the file name that has had path stripped and extension stripped
      new_files.append(no_ext)
      pass
    pass
  else:
    #not loading  anything
    pass
  return new_files

Вы используете os.path.abspath функция:

>>> import os
>>> os.path.abspath('C:/foo/bar')
'C:\\foo\\bar'
Другие вопросы по тегам