在Jupiter中为python应用程序构建原型前端时,我正在使用ipywidget促进与后端的交互(基本上是推荐引擎)。
期望的行为是,当单击按钮时,将根据用户反馈(对项目进行一定程度的评估)刷新“ UI”。 因此,将基于此反馈显示新项目。
但是,button.on_click(函数)不允许:
我可以通过以下方法解决此问题:
但是我无法解决:
我已经使用了全局变量,并使用函数定义将输入传递给被调用的函数,但是该输入不是全局的。
理想情况下,它应该像这样工作:
def on_button_clicked(inputs):
item_characteristics = pd.read('items.cvs')
dash, inputs = recommendation_dashboard(input, item_characteristics)
display(dash)
return inputs
def recommendation_dashboard(user_input, item_characteristics):
items = function to pick items based on user_input from previous round and item characteristics.
form = [set of ipywidgets to display information on items,
set of buttons to rate said items]
return HBox(form),inputs
理想情况:
new_items_button.on_click(input = on_button_clicked (input) )
HBox([new_items_button])
因此该函数将通过以下步骤:
当我尝试使用全局变量返回输入并通过定义将输入传递给函数时
new_items_button.on_click(on_button_clicked (input))
TypeError:“ NoneType”对象不可调用
我认为这里没有实现任何奇特的错误处理,因此很难解析。
当我这样做时
new_items_button.on_click(input = on_button_clicked (input) )
TypeError:on_click()得到了意外的关键字参数'inputs'
(这是合乎逻辑的,但令人沮丧的)
由于使用函数创建了输入表单,因此无法检索输入,因此无法全局访问输入。
那么可以将变量传递给on_click事件调用的函数吗? (因为这些变量在按下按钮之间会发生变化,因此没有静态定义就足够了。)