Почему QFileDialog использует косую черту вместо обратной косой черты?

Почему "\" и "/" смешаны?

os.getcwd() испускает строку с обратной косой чертой

С другой стороны, QFileDialog испускает косую черту

Зачем?

пример

Пожалуйста, выполните этот пример кода.

from PySide import QtGui
from PySide import QtCore
import sys
import os

class DirectoryPrinter(QtGui.QWidget):
    def __init__(self,parent=None):
        super(DirectoryPrinter,self).__init__(parent=None)

        self.filedialog_pushbutton = QtGui.QPushButton("filedialog",self)
        self.connect(self.filedialog_pushbutton,QtCore.SIGNAL("clicked()"),self.filename_getter)

    def filename_getter(self):
        print("from os.getcwd()",os.getcwd())
        filename = QtGui.QFileDialog.getOpenFileName(self,"Select your file",os.path.expanduser("~"))[0]
        print("from QFileDialog",filename)


def main():
    try:
        QtGui.QApplication([])
    except Exception as e:
        print(22,e)
    directoryprinter = DirectoryPrinter()
    directoryprinter.show()

    sys.exit(QtGui.QApplication.exec_())
if __name__ == "__main__":
    main()

Результат (по моему случаю)

от os.getcwd(): J:\

от QFileDialog: C:/Users/******/setup.py

2 ответа

Решение

Это потому что QFileDialog использует косую черту независимо от ОС. Это облегчает написание кода обработки пути.

Ты можешь использоватьos.path.normpath для преобразования прямой косой черты в обратную косую черту в пути в Windows.

Это дизайнерское решение со стороны Qt, в то время как Python использует системные соглашения для путей *.

Если вы хотите преобразовать с помощью самого Qt, вы можете использовать:

      QtCore.QDir.toNativeSeparators(filename)

* Примечание: Python использует системные соглашения, некоторые функции обрабатывают косую черту в Windows. Если вы создаете свои собственные пути на Python, я предлагаю вам взглянуть на Pathlib, который находится в стандартной библиотеке Python.

** Совет: при создании с помощью pathlib, самый простой вариант - не использовать Path.joinpath() при присоединении к каталогу с именем файла. Вместо этого используйте косые черты в качестве операторов:

      from pathlib import Path
dirpath = Path(r'Avoid\Using\Hardcoded\Paths')
filename = dirpath / "basename.ext"
Другие вопросы по тегам