PyQt5 FileDialog:显示网络文件夹

时间:2017-03-24 10:54:34

标签: python qt pyqt4 pyqt5 qfiledialog

我的系统如下: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

2 个答案:

答案 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