Linux 为什么PyQt5 QFileDialog.getExistingDirectory无法看到~/.config/子目录?
在Python2.7和PySide下,我能够指向~/.config/的子目录。但是,当我移动到Python3和PyQt5时,我可以打开~/.config/但不能打开它的子目录。。。(所有目录都具有Linux 为什么PyQt5 QFileDialog.getExistingDirectory无法看到~/.config/子目录?,linux,python-3.x,pyqt5,Linux,Python 3.x,Pyqt5,在Python2.7和PySide下,我能够指向~/.config/的子目录。但是,当我移动到Python3和PyQt5时,我可以打开~/.config/但不能打开它的子目录。。。(所有目录都具有drwxr-xr-x权限,并且没有发生特殊的chattr内容或ACL内容。) 多亏了@ekhumoro,我们才有了赢家!告诉QFileDialog不要使用本机对话框成功了。具体而言: #!/usr/bin/evn python3 # -*- coding: utf-8 -*- # Arch Linux
drwxr-xr-x
权限,并且没有发生特殊的chattr内容或ACL内容。)
多亏了@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)
“我没有问题,我使用的是相同软件版本的Arch Linux,你可以更好地解释自己,也许我没有正确地理解你。”Ubuntourist。尝试用完整路径替换所有
“~/.config”
→ <代码>/home/name/.config。。。。不是所有的操作系统,也不是所有的程序都可以使用~/
作为路径。我也不能在arch linux(python 3.6.5、qt 5.11.0、pyqt 5.10.1)上重现这个问题。你用的是什么?如果在参数中添加options=QFileDialog.DontUseNativeDialog
,会有什么区别吗?@ekhumaro我使用的是KDE。我将尝试选项=“…”@KnudLarsen不是这样的。传递给QFileDialog的值已扩展为完整路径。这就是os.path.expanduser()所做的,它在部分代码中成功的事实表明“~/”并不是这里的问题。很好,它工作得很好,但仍然相当令人困惑。是否只有那个目录受到影响?或者它是虚线路径吗?它对所有的.虚线目录都是这样的。然而,使用“pipenv外壳”,即使它声称使用相同版本的PyQt5,也不会发生错误。。。(5.10.1.“pip列表”不包括“-3”。)
#!/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)