我正在尝试“小部件化”我的 IPython 笔记本,并且在处理事件和从函数返回值时遇到了麻烦。这是我认为最好的工作流程:
- 使用小部件获取任意函数的输入值
- 在事件触发时调用函数
- 从函数返回值
我首先尝试使用“交互”方法来调用函数,但这似乎很难关联事件和返回值。从阅读其他交互式示例来看,开设课程似乎是可行的方法。我不经常写课。所以希望我的错误在那里很简单。
下面制作了两个小部件,当用户按下“Enter”时,应该调用一个函数并将其返回值存储在类中以供将来使用。
实际上,它会在我输入任何文本之前两次触发该函数,并在我更改值时抛出“unicode object is not callable”。
import ipywidgets as widgets
from IPython.display import display
def any_function_returning_value(word1,word2):
new_word = 'Combining words is easy: %s %s'%(word1,word2)
print new_word
return new_word
class learn_classes_and_widgets():
def __init__(self, param1 = 'a word', param2 = 'another word'):
self.p1_text = widgets.Text(description = 'Word #1',value = param1)
self.p2_text = widgets.Text(description = 'Word #2',value = param2)
self.p1_text.on_submit(self.handle_submit())
self.p2_text.on_submit(self.handle_submit())
display(self.p1_text, self.p2_text)
def handle_submit(self):
print "Submitting"
self.w = any_function_returning_value(self.p1_text.value,self.p2_text.value)
return self.w
f = learn_classes_and_widgets(param1 = 'try this word')
#f.w should contain the combined words when this is all working