我的系统如下:python 3.6.0,在ubuntu 16.10上的anaconda环境中安装了PyQt 5.8.1。
我想用PyQt5 FileDialog显示/选择网络文件夹(通过samba连接),但我无法这样做。 在PyQt4(另一个环境)中,它可以工作。
相关代码: 来自PyQt5导入QtWidgets 的FileDialog = QtWidgets.QFileDialog() workDirectory = str(fileDialog.getExistingDirectory(caption =“Set Work Directory”,directory = defaultWorkDirectory)) fileDialog.deleteLater()
PyQt5文档只引出了C ++文档,其中有关于网络/本地文件:“注意:非本机QFileDialog仅支持本地文件。”并且“如果可能,这个静态函数将使用本机文件对话框而不是QFileDialog。在不支持选择远程文件的平台上,Qt将只允许选择本地文件。” 我想,ubuntu支持这个(就像在PyQt4中一样)。
有没有办法做到这一点,还是我必须解决PyQt4?
谢谢, Topsrek
答案 0 :(得分:1)
这是因为gtk3文件对话框默认隐藏非本地文件。 (这必须在Qt gtk3平台实现中明确启用,bugreport)
Qt4没有gtk3支持,所以你得到了一个不执行此操作的gtk2文件对话框。
我没有找到让Qt5使用gtk2对话框的方法,并且您发现自己非本地对话框也不支持网络位置。
作为一种解决方法,您可以导航到/run/user/(your username)/gvfs/*
中已安装的位置
虽然看起来很难看,但我建议使用它而不是回到PyQt4。
答案 1 :(得分:0)
如果有人想在 Qt5 中修改此行为,这里有一个解决方案。在 qtbase/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp
中,更改 gtk_file_chooser_set_local_only
的参数:
void QGtk3FileDialogHelper::applyOptions()
{
GtkDialog *gtkDialog = d->gtkDialog();
const QSharedPointer<QFileDialogOptions> &opts = options();
gtk_window_set_title(GTK_WINDOW(gtkDialog), qUtf8Printable(opts->windowTitle()));
//gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(gtkDialog), true);
gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(gtkDialog), false);
//...
}
现在 GTK 3 文件对话框可以显示已安装的共享。见gtk-file-chooser-set-local-only。