为啥 QFileDialog 使用斜杠而不是反斜杠?

Posted

技术标签:

【中文标题】为啥 QFileDialog 使用斜杠而不是反斜杠?【英文标题】:Why does QFileDialog use slash instead of backslash?为什么 QFileDialog 使用斜杠而不是反斜杠? 【发布时间】:2019-01-28 05:30:00 【问题描述】:

为什么“\”和“/”混在一起?

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:\

来自QFileDialogC:/Users/******/setup.py

【问题讨论】:

【参考方案1】:

这是 Qt 的设计决定,而 Python 使用系统的路径约定*。

如果你想使用Qt本身进行转换,你可以使用:

QtCore.QDir.toNativeSeparators(filename)

*注意:Python 使用系统的约定,一些函数在 Windows 上处理正斜杠。如果您在 Python 中构建自己的路径,我建议您查看 Python 标准库中的Pathlib。

**提示:如果使用 pathlib 构建,最简单的选项是在使用文件名加入目录时不使用 Path.joinpath()。改为使用斜杠作为运算符:

from pathlib import Path
dirpath = Path(r'Avoid\Using\Hardcoded\Paths')
filename = dirpath / "basename.ext"

【讨论】:

【参考方案2】:

这是因为QFileDialoguses forward slashes regardless of OS. This makes it easier to write path handling code。

您可以使用 os.path.normpath 在 Windows 上将路径中的正斜杠转换为反斜杠。

【讨论】:

其实这个结果我是从PySide Documentation,QDir class中查到的。但是你的资料知识量很大,很有用。谢谢。

以上是关于为啥 QFileDialog 使用斜杠而不是反斜杠?的主要内容,如果未能解决你的问题,请参考以下文章

为啥顺风 css 类名中有反斜杠?

为啥JSON字符串当中会出现反斜杠?

为啥单反斜杠变成双反斜杠

为啥反斜杠出现两次?

为啥反斜杠出现两次?

为啥反斜杠出现两次?