为什么 QFileDialog 使用斜杠而不是反斜杠?
Why does QFileDialog use slash instead of backslash?
为什么“\”和“/”混用?
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
这是因为QFileDialog
uses forward slashes regardless of OS. This makes it easier to write path handling code.
您可以使用 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"
为什么“\”和“/”混用?
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
这是因为QFileDialog
uses forward slashes regardless of OS. This makes it easier to write path handling code.
您可以使用 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"