Где находится очередь сообщений для ipywidget Jupyter? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть интерактивный сюжет, использующий matplotlib и ipywidgets, который мучительно медленный, поэтому отображение отстает от взаимодействия. Один из способов исправить это - указать моему виджету continuous_update=False, но я не хочу этого делать - мне нравится, когда пользователь видит изменения через постоянную обратную связь.

Я подумал, что, возможно, смогу проверитьочередь сообщений от виджета: если последующие изменения находятся в очереди, то текущее состояние устарело, и я мог бы также отменить построение графика. Сообщения обязательно должны быть поставлены в очередь где-то . Доступна ли эта очередь сообщений?

Вот минимальный пример.

import matplotlib.pyplot as plt
import numpy
from IPython.display import display
import ipywidgets

# Don't want continuous_update=False
widg = ipywidgets.FloatSlider(value=.5,min=0,max=1,step=.01)
output = ipywidgets.Output()

def update_plot(msg):
    # ??? if there are further changes queued: return
    a = widg.value  # or msg['new']
    x = numpy.linspace(0,1,100)
    plt.plot(x, (x>=a) & (x<=a+.2))
    plt.ylim(-.02,1.02)
    output.clear_output(wait=True)
    with output:
        plt.show()

widg.observe(update_plot, 'value')

display(ipywidgets.VBox([widg, output]))
update_plot(None)
...