2015-08-10 2 views
2

У меня есть noteboook IPython с два widets (carW и speedW) и две функции (print_car и print_car_and_speed), которые зависят от значений виджета. То, что я пытаюсь достичь, состоит в том, что вывод print_car изменяется, когда изменяется значение carW и что вывод print_car_and_speed изменяется всякий раз, когда изменяется значение carW10 или speedW.IPython ноутбуков две функции, которые зависят от значений виджета

Вот код, который я использую:

from IPython.html import widgets 
from IPython.display import display 

def print_car(car): 
    print "Selected car: {}".format(car) 

def print_car_and_speed(car, speed): 
    print "Driving {} with speed: {}".format(car, speed) 

carW = widgets.Dropdown(options=['Prius', 'Porsche']) 
carW.value = 'Prius' 

i = widgets.interactive(print_car, car=carW) 
display(i) 

speedW = widgets.FloatSlider() 

j = widgets.interactive(print_car_and_speed, car=carW, speed=speedW) 
display(j) 

Проблема с этим кодом является то, что выходprint_carне отображается для меня. Однако, если я комментирую последние две строки, вывод print_car отображается так, как я ожидал.

В идеале я хотел бы выход следовать следующему формату:

  • carW виджета
  • выход из print_car
  • speedW виджета (не повторять carW виджета)
  • выходом print_car_and_speed

Было бы здорово, если бы вы я мог бы дать мне указатели, как я могу это достичь. Спасибо!

ответ

1

Я выяснил, как отображать выходные данные двух функций, которые зависят от значения одного виджета, чтобы они не попадали друг в друга через промежуточный обработчик, который передает значение виджета двум выходным функциям:

from IPython.html import widgets 
from IPython.display import display 

def handler_car(car): 
    print_car(car) 
    print_car_and_speed(car, speedW.value) 

def handler_speed(speed): 
    print_car(carW.value) 
    print_car_and_speed(carW.value, speed) 

def print_car(car): 
    print "Selected car: {}".format(car) 

def print_car_and_speed(car, speed): 
    print "Driving {} with speed: {}".format(car, speed) 

carW = widgets.Dropdown(options=['Prius', 'Porsche']) 
carW.value = 'Prius' 

speedW = widgets.FloatSlider() 

i = widgets.interactive(handler_car, car=carW) 
display(i) 

j = widgets.interactive(handler_speed, speed=speedW) 
display(j) 

единственный бит, который теперь не хватает для меня, чтобы организовать это в правильном порядке:

  • carW виджет
  • выход print_car
  • speedW виджет (не повторять carW виджет)
  • выход print_car_and_speed
Смежные вопросы