Function 列出ipywidgets上函数的输出

Function 列出ipywidgets上函数的输出,function,user-interface,button,display,ipywidgets,Function,User Interface,Button,Display,Ipywidgets,我构造了一个链接到MySQL的函数,该函数返回给定父id的子项列表。我想使用IPyWidget输出这个子项列表 我无法将函数链接到ipywidgets。到目前为止,我已经: > from ipywidgets import widgets > > text1 = widgets.Text() > text2 = widgets.Text() > button = widgets.Button(description = 'Run') > display

我构造了一个链接到MySQL的函数,该函数返回给定父id的子项列表。我想使用IPyWidget输出这个子项列表

我无法将函数链接到ipywidgets。到目前为止,我已经:

> from ipywidgets import widgets
> 
> text1 = widgets.Text() 
> text2 = widgets.Text() 
> button = widgets.Button(description = 'Run')

> display(text1) 
> display(button) display(text2)
> 
> idnum = text1.value 
> text2.value= list_children(idnum)    
> 
> button.on_click(list_children)
功能如下:

> def list_children(parentid):
>     value = parentid
>     parent_80 = session.query(Parent).get(value) 
>     parent_80_children= parent_80.children
>     childrenlist=[] 
>     
>     for i in parent_80_children:
>         childrenlist.append(i.UWI)
>         
>     return childrenlist
我不断得到以下错误:

AttributeError:“非类型”对象没有属性“子对象”

当它在这一行中断时:

如果我运行python单元,那么该函数是正确的,因此我知道它正在工作,但是当我尝试单击小部件框“run”时,它会中断。不知何故,函数和小部件框之间没有链接

我希望在单击“运行”窗口小部件按钮时获得如下输出:

> def list_children(parentid):
>     value = parentid
>     parent_80 = session.query(Parent).get(value) 
>     parent_80_children= parent_80.children
>     childrenlist=[] 
>     
>     for i in parent_80_children:
>         childrenlist.append(i.UWI)
>         
>     return childrenlist
  • 1771860100
  • 1771860200
  • 1771860300
减去要点


欢迎您的任何意见

当您使用按钮的
方法时,您需要指定要运行的函数,该函数已正确执行。但是,当您单击按钮时,按钮实例本身会传递给函数。这就解释了为什么当你点击按钮时,你会看到这个错误。该函数认为它正在获取一个
parentid
(可能是一个字符串或int),但实际上接收的是
ipywidgets.Button的一个实例

假设您希望像在代码的上半部分一样获取
text1
小部件中的文本,则需要将
text
小部件传递给函数。因此,使用
partial
将此添加到您的
on_click()
调用中,以指定文本字段作为参数。文本小部件将是第一个参数,按钮实例将作为第二个参数。如果在编写函数定义时忘记了传递按钮实例,则会出现一个错误,即“只接受1个参数,但给定2个”

希望您能以下面的示例为例进行修改,以满足您的需要


将IPyWidget作为小部件导入
从functools导入部分
text1=widgets.Text()
def列表子项(文本字段,按钮):
打印(文本\字段值)
button=widgets.button()
按钮。单击(部分(列出子项,文本1))
显示(文本1,按钮)

感谢您详尽的回答!我让它工作了。