如何在jupyter事件窗口小部件上输入和输出参数(单击按钮)

时间:2019-07-03 08:48:08

标签: python jupyter

在Jupiter中为python应用程序构建原型前端时,我正在使用ipywidget促进与后端的交互(基本上是推荐引擎)。

期望的行为是,当单击按钮时,将根据用户反馈(对项目进行一定程度的评估)刷新“ UI”。 因此,将基于此反馈显示新项目。

但是,button.on_click(函数)不允许:

  1. 返回输出(用户输入)的功能
  2. 我也无法将参数(前几轮的输入)传递给 功能。

我可以通过以下方法解决此问题:

  1. 为输出设置全局参数(不是我的最爱 解决方案之一)

但是我无法解决:

  1. 将输入传递给功能

我已经使用了全局变量,并使用函数定义将输入传递给被调用的函数,但是该输入不是全局的。

理想情况下,它应该像这样工作:

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])

因此该函数将通过以下步骤:

  1. 有一个功能可以处理空用户输入(生成随机 例子)
  2. 显示项目
  3. 用户提供反馈(不同的单选按钮),之后 用户单击new_item_button并:
  4. 函数应返回此输入的反馈,并将其传递给 Recommendation_dashboard,以便在单击按钮时 新项目,根据此输入,将显示一组新项目 (可以随后对其进行评分)。

当我尝试使用全局变量返回输入并通过定义将输入传递给函数时

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事件调用的函数吗? (因为这些变量在按下按钮之间会发生变化,因此没有静态定义就足够了。)

1 个答案:

答案 0 :(得分:0)

我不确定我是否了解你,但我认为有一种方法 要执行的操作是使用对象的方法来处理 click事件并封装您需要的任何状态 该对象如下面的屏幕截图所示,该对象实现了一个计数器,该计数器计算了单击按钮的次数。

enter image description here

还要记住,f(click())将评估click 函数并将其结果传递给f。我认为 在您的问题中,您确实想要f(click)通过 从clickf的函数值,而不对其求值。