python - 如何在 JupyterLab/JupyterHub python notebook 中显示服务器端文件的文件选择对话框?
问题描述
我想显示一个文件选择对话框,我的 JupyterLab 笔记本的用户可以在其中从他们的工作区中选择一个文件(= 服务器上的文件,而不是他们的本地计算机上的文件)。
如果我尝试使用一些 python 库(tkinter、qt),那将尝试在服务器上打开一个 GUI。但是,我想在客户端上有一个 GUI。由于客户端在浏览器中运行,因此该 GUI 需要基于 html/javascript。
此外,要选择的文件位于服务器上。可以使用系统命令(例如“!dir”)显示现有文件的列表。
JupyterLab 中似乎有用于文件选择的小部件:
https://jupyterlab.readthedocs.io/en/stable/developer/ui_helpers.html#file-dialogs
JavaScript 代码(需要 Jupyterlab 扩展的构建步骤;FileDialog
需要从 @jupyterlab/filebrowser 导入;DocumentManager 需要作为插件依赖从 @jupyterlab/docmanager 注入;):
var { FileDialog } = require('@jupyterlab/filebrowser');
const dialog = FileDialog.getOpenFiles({
manager, // IDocumentManager
filter: model => model.type == 'notebook' // optional (model: Contents.IModel) => boolean
});
const result = await dialog;
if(result.button.accept){
let files = result.value;
}
=>如何在我的 python 代码中使用这些小部件?是否有一些额外的 python 库可以这样做?
不幸的是FileDialog
,似乎没有包含在ipywidgets
:
import ipywidgets as widgets
print(dir(widgets))
有关的:
https://discourse.jupyter.org/t/jupyterlab-file-chooser-widget-server-side/4934/3
ipywidgets
https://ipywidgets.readthedocs.io/en/stable/examples/Widget%20List.html
https://www.blog.pythonlibrary.org/2018/10/24/working-with-jupyter-notebook-widgets/
qt 和 tkinter
解决方案
作为一种解决方法,有https://pypi.org/project/ipyfilechooser/
文件选择不会显示为额外的对话框窗口,而是显示在笔记本单元格的输出区域中,另请参阅:
https://github.com/crahan/ipyfilechooser/issues/31
安装:
pip install ipyfilechooser
用法:
from ipyfilechooser import FileChooser
fc = FileChooser()
display(fc)
fc.selected
推荐阅读
- vue.js - Vuejs:axios;在 POST 方法中传递自定义标头
- r - 为满足 R 中条件的行分配因子
- sql - 使用查询结果来确定 SQL 中 where 子句中的值?
- ipfs - 所有 IPFS 请求都通过公共网关吗?
- computer-vision - 我该如何回答这个计算机视觉理论问题?
- python - 来自子进程命令 Python 的实时输出状态
- redux - 传递数据时如何写mapDispatchToProps?
- vue.js - v-if 中断 nuxt ssr
- linux - 如何在 debian linux 上安装 dpkg 文件?
- ubuntu - 从 jenkins 管道运行 anypoint-cli