1

QFileDialog インスタンスが、特定のオペレーティング システムに対して間違った区切り文字を持つメンバー関数 selectedFile() の絶対パスを返していることに気付きました。これは、クロスプラットフォーム言語 (python) では想定されていません。

「os.sep」を使用する適切な OS に依存しない python コードの残りの部分が正しくなるように、これを修正するにはどうすればよいですか? どこで使用できるか、どこで使用できないかを覚えておく必要はありません。

4

2 に答える 2

2

You use the os.path.abspath function:

>>> import os
>>> os.path.abspath('C:/foo/bar')
'C:\\foo\\bar'
于 2013-05-10T22:46:51.543 に答える
1

答えは、 QDir.toNativeSeparators() を使用する必要があると述べた別のスレッド ( HERE ) から来ました。

そのため、ループで次のことを行いました(これはおそらく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
于 2013-05-10T22:38:48.107 に答える