Дождитесь взаимодействия пользователя с виджетом во внешнем интерфейсе (INLINE JUPYTERNOTEBOOK) - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь создать простой GUI, который работает , встроенный в блокнот Jupyter. Идея заключается в создании виджета-слайдера, который обновляет сюжет. Как только пользователь находит предпочтительную позицию слайдера, он просто нажимает на виджет кнопки, и программа сохраняет позицию слайдера (обратная связь с пользователем).

Следующий код работает, когда в начале записной книжки Jupyter я установил:

%matplotlib qt

Код (сокращенный), который создает графики, ползунки и механизм обновления:

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button

fig, ax = plt.subplots(nrows=1, ncols=2)
... CODE THAT DEFINES THE PLOTS
fig.text(0.1, 0.035, "$\it{Please\ select\ the\ most\ realistic\ hyperparameter\ configuration. }$")
plt.draw()

paramfreq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor='lightgoldenrodyellow')
slider = Slider(paramfreq, 'Hyperparam. conf.', 1, self.user_feedback_grid_size, valinit=1, valstep=1)
def update(val):
    param_ind = int(slider.val-1)
    update_errorbar(l1, x_axis_points, np.mean(self.irf(param_ind,'y'),axis=0), xerr=None, yerr=np.std(self.irf(0,'y'),axis=0)) 
    update_errorbar(l2, x_axis_points, np.mean(self.irf(param_ind,'r'),axis=0), xerr=None, yerr=np.std(self.irf(0,'r'),axis=0)) 
    fig.canvas.draw_idle() 
slider.on_changed(update) 

confirm_ = plt.axes([0.8, 0.025, 0.1, 0.04])
button = Button(confirm_, 'Confirm', color='lightgoldenrodyellow', hovercolor='0.975')
def confirm(event):
    typed_value = int(slider.val)
    print('Your choice was: ' + str(typed_value))
    self.user_feedback = self.current_xi_grid[(int(typed_value)-1),:]
    self.user_feedback_was_given = True
    plt.close('all')

button.on_clicked(confirm)
plt.show()

Событие l oop:

while True:
    if self.user_feedback_was_given:
        break
    plt.pause(0.5)

Проблема в том, что я хотел бы, чтобы GUI был встроен в блокнот jupyter. Когда я пытаюсь добиться этого, заменив

%matplotlib qt

на

%matplotlib widget

, я сталкиваюсь с новой проблемой: «plt.pause ()» не работает с виджетом% matplotlib (ipympl) ). Я пробовал множество различных подходов, но я не могу найти решение, которое работает. Заранее спасибо за любую помощь.

...