PyQt5 FileDialog:显示网络文件夹

PyQt5 FileDialog: Show network folders

我的系统如下: python 3.6.0 with PyQt 5.8.1 installed in an anaconda environment on ubuntu 16.10.

我想 show/select 网络文件夹(通过 samba 连接)与 PyQt5 FileDialog,但我无法这样做。 在 PyQt4(另一个环境)中它可以工作。

相关代码: 从 PyQt5 导入 QtWidgets 文件对话框=QtWidgets.QFileDialog() workDirectory = str(fileDialog.getExistingDirectory(标题= "Set Work Directory", 目录=defaultWorkDirectory)) fileDialog.deleteLater()

PyQt5 文档仅指向 C++ 文档,其中有关于 network/local 文件的内容:"Note: The non-native QFileDialog supports only local files." 和 "When possible, this static function will use the native file dialog and not a QFileDialog. On platforms which don't support selecting remote files, Qt will allow to select only local files." 我想,ubuntu 支持这个(就像在 PyQt4 中一样)。

有没有办法做到这一点,还是我必须使用 PyQt4 解决?

谢谢, 顶峰

发生这种情况是因为 gtk3 文件对话框默认隐藏了非本地文件。 (这必须在 Qt gtk3 平台实现中明确启用,bugreport

Qt4 不支持 gtk3,所以你会得到一个 gtk2 文件对话框,它不会执行此操作。

我没有找到让 Qt5 使用 gtk2 对话框的方法,而且你自己发现非本地对话框也不支持网络位置。

作为解决方法,您可以导航到 /run/user/(your username)/gvfs/*.
中已安装的位置 尽管这看起来很丑陋,但我建议使用它而不是回到 PyQt4。

万一有人想在 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