Как избежать RuntimeError: Словарь изменил размер во время итерации - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь обновить ползунок на основе другого ползунка и не могу видеть логи c этой ошибки RuntimeError. Альфа устанавливается ползунком, и z зависит от этого результата. Максимальное значение Z на слайдере необходимо обновить. Я чувствую, что я близко, но не могу видеть это в последний раз. Ура

axz = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)
axalpha = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor)

salpha = Slider(axalpha, '$\u03B1$', 0, 0.08, valinit=alpha, valstep=delta_alpha)
sz = Slider(axz, 'z', 0, ZMax, valinit=z0, valstep=delta_z)


def update(val):
    alpha = salpha.val
    R0 = (1 / 2) * (1 + (1 - (12 * alpha)) ** (1 / 2))  # relationship between alpha and radius at lower tuning point
    R1 = (1 / 2) * (1 - (1 - (12 * alpha)) ** (1 / 2))  # relationship between alpha and radius at upper tuning point
    PE = ((1 / R0 ** 2) - (2 / R0) - (2 * alpha / R0 ** 3))  # Veff/V* at KE=0
    EMax = ((1 / R1 ** 2) - (2 / R1) - (2 * alpha / R1 ** 3))  # Gives peak of curve
    ZMax = (EMax - PE) ** (1 / 2)  # Converts energy at peak to Z value and saves to variable ZMax to later cap the upper limit of slider
    axz.clear()
    sz = Slider(axz, 'z', 0, ZMax, valinit=z0, valstep=delta_z)

    u0 = 1 / R0
    z0 = sz.val
    j = odeint(model,[u0,z0],phi)
    u = j[:, 0]
    R = 1 / u
    l.set_ydata(R*np.sin(phi))
    l.set_xdata(R*np.cos(phi))

    fig.canvas.draw_idle()

    E = (z0 ** 2) + PE
    l1.set_ydata(E)
    fig1.canvas.draw_idle()
    salpha.on_changed(update)
    sz.on_changed(update)
salpha.on_changed(update)
sz.on_changed(update)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...