【问题标题】:PyQt5 FileDialog: Show network foldersPyQt5 FileDialog:显示网络文件夹
【发布时间】:2017-08-17 06:47:39
【问题描述】:

我的系统如下:python 3.6.0 和 PyQt 5.8.1 安装在 ubuntu 16.10 的 anaconda 环境中。

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

相关代码: 从 PyQt5 导入 QtWidgets fileDialog=QtWidgets.QFileDialog() workDirectory = str(fileDialog.getExistingDirectory(caption= "设置工作目录", directory=defaultWorkDirectory)) fileDialog.deleteLater()

PyQt5 文档只指向 C++ 文档,关于网络/本地文件的内容如下:“注意:非本地 QFileDialog 仅支持本地文件。”和“如果可能,这个静态函数将使用本机文件对话框而不是 QFileDialog。在不支持选择远程文件的平台上,Qt 将只允许选择本地文件。” 我想,ubuntu 支持这个(就像在 PyQt4 中一样)。

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

谢谢, 托普斯雷克

【问题讨论】:

    标签: python qt pyqt4 pyqt5 qfiledialog


    【解决方案1】:

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

    Qt4 不支持 gtk3,因此您会得到一个不支持此功能的 gtk2 文件对话框。

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

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

    【讨论】:

      【解决方案2】:

      如果有人想在 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        相关资源
        最近更新 更多