Как реализовать диалоговое окно «Файл», которое открывается в блокноте Azure Jupyter в Python? - PullRequest
1 голос
/ 10 марта 2019

Мой код:

%gui qt

from PyQt5.QtWidgets import QFileDialog

def gui_fname(dir=None):
    """Select a file via a dialog and return the file name."""
    if dir is None: dir ='./'
    fname = QFileDialog.getOpenFileName(None, "Select data file...", 
                dir, filter="All files (*);; SM Files (*.sm)")
    return fname[0]

from IPython.display import display
button = widgets.Button(description="Open The File  !!")
button.style.button_color = 'yellow'
display(button)


def on_button_clicked(b):
    print("Button clicked.")
    f=gui_fname()
    #import fileplot
    #fileplot.load_file(f)



button.on_click(on_button_clicked)
#b1 = Button(description='Open File !!')
#b1.style.button_color = 'yellow'
#b1.on_click(on_button_clicked)
#b1

Проблема: она отлично работает в локальном ПК Python версии 2.7 для Linux

Но когда я пытаюсь реализовать его удаленно в Azure Jupyter Notebook, ядро ​​умирает каждыйраз я запускаю код и не могу получить результаты.Есть ли какой-нибудь другой способ, которым я могу реализовать диалоговое окно файла с виджетами html5 в виджетах ipython ??

Что мне нужно, чтобы пользователь выбрал файл, который находится на его / ее компьютере, который доступен локально.1

enter image description here

1 Ответ

0 голосов
/ 11 марта 2019

На самом деле вы не можете использовать какой-либо собственный API-интерфейс GUI в Azure Jupyter Notebook, поскольку Azure Jupyter Notebook работает на удаленном сервере Linux без какой-либо поддержки графического интерфейса и является веб-приложением для удаленного доступа.

Так что, если вы хотите показать диалоговое окно файла для пользователя клиента, диалог HTML-файла - это единственный вариант для вас. Простое решение заключается в использовании модуля display & HTML класса IPython для отображения кнопки Choose File, см. Код и результат, как показано ниже.

from IPython.display import display, HTML

display(HTML("""
    <input type="file" name="myfile">
"""))

Результат:

enter image description here

Для более сложных случаев вы можете обратиться к этим блогам IPython Notebook: Javascript/Python Bi-directional Communication и Reading files in JavaScript using the File APIs, чтобы создать свой собственный. Тем не менее, отсутствует служба для получения и сохранения загружаемого файла, которую необходимо реализовать самостоятельно. Или вы можете просто использовать существующий проект с именем fileupload ( PyPI , GitHub ) для IPython, который представляет собой «виджет записной книжки IPython для загрузки файлов, используя FileReader . "

...