Я пытаюсь создать простой 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) ). Я пробовал множество различных подходов, но я не могу найти решение, которое работает. Заранее спасибо за любую помощь.