matplotlib.widgets.Slider
인스턴스와 관련된 콜백 내부에서 valmin
, valmax
및 val
특성을 수정 한 다음 Slider
을 다시 그려야합니다. 다시 그릴 때 아무 일도 일어나지 않습니다.일부 속성을 변경 한 후 위젯을 강제로 다시 그리는 방법?
콜백이 완료되기 전에 plt.draw()
으로 전화를 걸고 나머지 플롯은 올바르게 업데이트되지만 Slider
은 이전과 동일하게 보입니다. 나는 Slider
의 Axes
에 draw()
을 호출 해 보았습니다. 눈에 보이는 변화는 없었습니다.
Slider
인스턴스의 속성을 변경 한 후 강제로 다시 그릴 수 있습니까?
Thansk!
UPDATE 여기
(원유 대화 상자가) 문제를 보여줍니다 작은 프로그램. 원하는 동작은 라디오 버튼의 다른 값을 클릭하면 슬라이더가 값 범위, 현재 값 및 레이블을 변경한다는 것입니다. 대신 "그라디언트"를 클릭하면 슬라이더가 응답을 멈추고 (더 이상 드래그 할 수 없음) "그라디언트"또는 "채널"을 클릭하면 plt.draw()
from matplotlib import pyplot as plt
from matplotlib import gridspec
from matplotlib.widgets import Slider, RadioButtons
# Set the grid
grid = gridspec.GridSpec(2, 1, height_ratios=[1, 2])
# Plot the sliders
axes_slider = plt.subplot(grid[0, 0])
slider = Slider(axes_slider, 'Channel', valmin=0, valmax=255, valinit=128)
# Plot the radio buttons
axes_button = plt.subplot(grid[1, 0])
button = RadioButtons(axes_button, ('Gradient', 'Channel'), active=1)
plt.tight_layout(h_pad=0)
plt.subplots_adjust(left=.2, right=.9)
def update(_):
take_gradient = True if button.value_selected == 'Gradient' else False
if take_gradient:
slider.valmin = -1
slider.valmax = 1
slider.val = 0
slider.label= 'Gradient'
slider.valinit = 0
else:
slider.valmin = 0
slider.valmax = 255
slider.val = 128
slider.label = 'Channel'
slider.valinit = 128
plt.draw()
# Register call-backs with widgets
slider.on_changed(update)
button.on_clicked(update)
plt.show()
에도 불구하고 업데이트되지 않습니다.
: 여기
은 작업 예입니다. – Fanta
코드 샘플로 질문을 업데이트했습니다. – Fanta