使用ipython小部件获取输入参数的函数返回值
我正试图“widgetize”我的IPython笔记本,但在事件和函数返回值方面遇到了麻烦。这就是我认为最好的工作流程:使用ipython小部件获取输入参数的函数返回值,ipython,ipywidgets,Ipython,Ipywidgets,我正试图“widgetize”我的IPython笔记本,但在事件和函数返回值方面遇到了麻烦。这就是我认为最好的工作流程: 使用小部件获取任意函数的输入值 在事件触发器上调用函数 函数返回值 我第一次尝试使用“interact”方法调用函数,但似乎很难将事件和返回值关联起来。通过阅读其他交互式示例,制作一个类似乎是一条可行之路。我不经常上课;希望我的错误很简单 下面是两个小部件,当用户按下“Enter”键时,应该调用一个函数并将其返回值存储在类中以备将来使用 实际上,在我输入任何文本之前,它会
- 使用小部件获取任意函数的输入值
- 在事件触发器上调用函数
- 函数返回值
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
奥利弗·鲁贝尔通过电子邮件回复。以下是他解决我问题的方法 提交时的分配错误 调用on.submit函数时,需要将要调用的函数交给它。在您的代码中,这看起来像这样
self.p1_text.on_submit(self.handle_submit())
self.p2_text.on_submit(self.handle_submit())
但是,代码所做的是调用self.handle_submit(因为函数后面包含了“()”括号),然后分配返回值
将该函数的值添加到提交句柄。这就解释了你所看到的行为。也就是说,在init()中调用函数两次,然后
当事件发生时,它尝试对函数返回的字符串执行操作。解决方法很简单,只需删除“()”,即:
句柄提交函数签名错误
handle submit函数必须接受小部件的文本对象作为输入。即,您将获得self.p1_文本或self.p2_文本作为输入,
取决于哪个小部件调用它。也就是说,您的函数应该如下所示:
def handle_submit(self, text):
...
有了以上的变化,一切都应该按预期进行。但是,如果您想为不同的小部件实现不同的行为,您可以
应该为不同的小部件使用不同的句柄函数,并将任何共享行为放入句柄调用的其他函数中
功能
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, text):
print "Submitting"
print "Text " + str(text.value)
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
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, text):
print "Submitting"
print "Text " + str(text.value)
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')