gpt4 book ai didi

python - 为什么 Tkinter 的 askdirectory() 在 Windows 上返回正斜杠?

转载 作者:可可西里 更新时间:2023-11-01 14:14:48 25 4
gpt4 key购买 nike

设置:Windows 7

Python 版本:3.3

我正在制作一个跨平台应用程序,我让用户使用 Tkinter 的 tkinter.filedalog.askdirectory 模块中的 askdirectory() 方法提供一个目录。这工作正常,除了 Windows 上的某些原因它给了我正斜杠。

Windows 使用反斜杠,而不是正斜杠,所以当我尝试用 native 文件斜杠保存文本文件时(配置文件存储目录,所以它有一个我必须添加的结尾斜杠),它看起来很傻:

F:/Pictures/Wallpapers\

我用来放native slash的代码就是os.sep,这是当前系统的native目录分隔符,在*nix和windows上是不一样的。

    def getDownloadPath(self):
pathdir=askdirectory()
if pathdir=='':
return #cancel
pathdir+=os.sep
self.download_location.delete(0,END)
self.download_location.insert(0,pathdir)

文件夹选择器不返回 native 斜杠是否有原因?我用谷歌搜索,没有看到任何答案。

最佳答案

编辑:

我要编辑我的答案,因为我认为我不是很清楚。


首先,tkinter.filedialog.askdirectory 总是 在它返回的路径中使用正斜杠。因此,您看到的不是错误——这是函数设计方式的结果。此外,此行为在 Windows 和 *nix 系统上都会发生。

现在,似乎没有任何东西可以直接说明为什么 askdirectory 是以这种方式构建的。 Tkinter 一直以文档记录不完善而著称。 ;)

但是,有几点需要考虑:

  1. \ 是 Python 字符串中的特殊字符。它创建一个 escape sequence .因此,如果 askdirectory 返回的路径包含反斜杠,则预计只会导致问题。或者,如果没有,您仍然需要一些安全代码来防止它们。

  2. Python 在路径中带有正斜杠的 Windows 和 *nix 系统上工作得很好。例如,这段代码:

    open("C:/path/path/")

    工作方式与此相同:

    open(r"C:\path\path")

    唯一的区别是,对于第二种方法,您必须处理转义序列。我通过使用原始字符串来做到这一点,这在上面的链接中有解释。但是,仅使用正斜杠要容易得多。

  3. 因为 Tkinter 是跨平台的,所以在内部使用规范化路径结构既方便又高效。因此,为什么不使用无需任何转义即可在 Windows 和 *nix 系统上工作的那个呢?

  4. 如果您必须为您的应用程序设置一个本地路径,Python 已经有内置函数来创建它。这些可以在 os.path 中找到模块。

考虑到这些原因,构建 askdirectory 以使用正斜杠似乎是合乎逻辑的。

关于python - 为什么 Tkinter 的 askdirectory() 在 Windows 上返回正斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com