【问题标题】:Why does PyQt5 QFileDialog.getExistingDirectory fail to see ~/.config/subdirectory?为什么 PyQt5 QFileDialog.getExistingDirectory 看不到 ~/.config/subdirectory?
【发布时间】:2018-06-01 03:43:20
【问题描述】:

在 Python2.7 和 PySide 下,我可以指向 ~/.config/ 的子目录。但是,当我移至 Python3 和 PyQt5 时,我可以打开 ~/.config/ 但不能打开它的子​​目录...(所有目录都具有 drwxr-xr-x 权限,并且没有发生特殊的 chattr 内容或 ACL 内容。)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Arch Linux (up-to-date)
# Python 3.6.5
# python-pyqt5 5.10.1-3

import os
import sys
from   PyQt5.QtCore    import *
from   PyQt5.QtGui     import *
from   PyQt5.QtWidgets import *

app = QApplication(sys.argv)

# Succeeds. (Lists three files in the autostart directory.)
wd = os.path.expanduser("~/.config/autostart")
os.system("ls {0}".format(wd))

# Fails. Opens to ~/
x = QFileDialog.getExistingDirectory(caption="Choose presets...", directory=wd)

wd = os.path.expanduser("~/.config")

# Succeeds. Opens at ~/.config/
x = QFileDialog.getExistingDirectory(caption="Choose presets...", directory=wd)

# Succeeds. Opens at ~/Documents/Volunteer
wd = os.path.expanduser("~/Documents/Volunteer")
x = QFileDialog.getExistingDirectory(None, "Choose presets...", wd)

【问题讨论】:

  • 我没问题,而且我用的是Arch Linux和相同的软件版本,你可以更好地解释一下自己,也许我没有正确理解你。
  • @Ubuntourist 。尝试用完整路径替换所有"~/.config"/home/name/.config .... 并非所有操作系统,并非所有程序都可以使用~/ 作为路径。
  • 我也无法在 arch linux(python 3.6.5、qt 5.11.0、pyqt 5.10.1)上重现该问题。你用的是什么DM?如果在参数中添加options=QFileDialog.DontUseNativeDialog 会有什么不同吗?
  • @ekhumoro 我正在使用 KDE。我会试试 options="..."
  • @KnudLarsen 不是这样。传递给 QFileDialog 的值已经扩展为完整路径。这就是 os.path.expanduser() 所做的,它在部分代码中成功的事实表明“~/”不是这里的问题。

标签: linux python-3.x pyqt5


【解决方案1】:

而且,感谢@ekhumoro,我们赢得了胜利!告诉 QFileDialog 不要使用本机对话框就可以了。具体来说:

#!/usr/bin/evn python3
# -*- coding: utf-8 -*-

# Arch Linux (up-to-date)
# Python 3.6.5
# python-pyqt5 5.10.1-3

import os
import sys
from   PyQt5.QtCore    import *
from   PyQt5.QtGui     import *
from   PyQt5.QtWidgets import *

app = QApplication(sys.argv)

# Succeeds. (Lists three files in the autostart directory.)
wd = os.path.expanduser("~/.config/autostart")
os.system("ls {0}".format(wd))

# SUCCEEDS (where it previously failed)
x = QFileDialog.getExistingDirectory(caption="Choose presets...", directory=wd,
                                     options=QFileDialog.DontUseNativeDialog)

【讨论】:

  • 嗯,它工作得很好——但仍然令人困惑。只有那个目录受到影响吗?还是任何虚线路径?
  • 它对所有 .dotted 目录的行为都是如此。但是,使用“pipenv shell”,即使它声称使用相同版本的PyQt5,也不会出现错误......(嗯,5.10.1。“pip list”不包括“-3”。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-21
相关资源
最近更新 更多