簡體   English   中英

從筆記本內清除 Jupyter 筆記本中單元格的小部件區域

[英]Clear widget area of a cell in a Jupyter notebook from within notebook

我想知道是否可以從筆記本端(即在 Python 中)清除 Jupyter 筆記本中單元格的小部件區域。 IPython.display.clear_output()只清除單元格的輸出區域而不是小部件區域。

更新:這在最新的 Notebook 和 ipywidgets 中似乎仍然是一個問題。 這里有兩個最小的例子來說明我正在努力解決的問題。 我特別想清除的小部件輸出是由qgrid呈現的數據幀。 在這兩種情況下,盡管嘗試清除前一個小部件輸出,但后續選擇會導致在前一個后追加一個表格。 每個新表都附加為一個帶有p-Widget類的 div。

import pandas as pd
import numpy as np
import qgrid
from ipywidgets import interact
from IPython.display import display, clear_output
import notebook
import ipywidgets

print('Jupyter Notebook version: {}'.format(notebook.__version__))
print('ipywidgets version: {}'.format(ipywidgets.__version__))

max_columns = 10
max_rows = 10    
col_opts = list(range(1, max_columns + 1))
row_opts = list(range(1, max_rows + 1))

第一次嘗試使用交互:

@interact(columns=col_opts, rows=row_opts)
def submit(columns, rows):
    df = pd.DataFrame(np.random.randint(0, 100, size=(rows, columns)))
    clear_output()
    display(qgrid.QGridWidget(df=df)

第二次嘗試使用輸出小部件:

output = ipywidgets.Output()
display(output)

def submit2(change):
    rows = row_input.value
    columns = col_input.value
    df = pd.DataFrame(np.random.randint(0, 100, size=(rows, columns)))

    with output:
        output.clear_output()
        display(qgrid.QGridWidget(df=df))

col_input = ipywidgets.Dropdown(options=col_opts)
row_input = ipywidgets.Dropdown(options=row_opts)

col_input.observe(submit2, 'value')
row_input.observe(submit2, 'value')

display(col_input)
display(row_input)

從 ipywidgets 7.0 版開始,小部件被視為與任何其他輸出一樣。 為了防止在執行clear_output()時清除小部件(但清除文本輸出clear_output() ,請使用輸出小部件。 像這樣的事情:

from IPython.display import display, clear_output
import ipywidgets as widgets
import random

b = widgets.Button(
    description='Show Random',
    disabled=False,
    button_style='info',
    tooltip='Click me',
    icon='check'
)
display(b)

out = widgets.Output()
display(out)

def on_button_clicked(b):
    with out:
        clear_output()
        print("New hello from each button click!. This hello from {}.".format(random.choice(list(range(100)))))

b.on_click(on_button_clicked)

這是! 這是IPython.display.clear_output()

from IPython.display import clear_output
for i in range(10):
    clear_output()
    print(i)

http://ipython.org/ipython-doc/dev/api/generated/IPython.display.html#IPython.display.clear_output


更新:

from IPython.display import clear_output
from ipywidgets import widgets

widgets.IntSlider(1)
clear_output()
# Note that `clear_output` will not clear widgets displayed using `display(widgets.IntSlider(1))`
widgets.IntSlider(100)

從 Jupyter 筆記本中,您可以通過“單元格/當前輸出/清除清除所有信息(文本和小部件)。

如果你想這樣做編程,你必須做一個clear_output()以明文形式和w.close()在每次創建窗口小部件(即W A部件)。 更多信息(“關閉小部件”): http : //ipywidgets.readthedocs.io/en/latest/examples/Widget%20Basics.html

在您的示例中(至少在您的第二次嘗試中),您需要添加:

col_input.close()
row_input.close()

我已經用這些版本對其進行了測試:

Jupyter Notebook version: 5.0.0
ipywidgets version: 6.0.0

從 ipywidgets 7.0 開始,小部件的呈現方式與任何其他輸出相同。 因此clear_output()將清除單元格的所有輸出,包括小部件。

小部件現在顯示在經典筆記本的輸出區域中,並被視為任何其他輸出。 這允許小部件更自然地與其他單元格輸出一起工作。 要刪除小部件,請清除單元格的輸出。 小部件視圖觸發的函數的輸出將附加到包含小部件視圖的輸出區域。 這意味着打印的文本將附加到輸出中,調用 clear_output() 將刪除整個輸出,包括小部件視圖。 (#1274、#1353)

來源: ipywidgets 更新日志

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM