报错takes 0 positional arguments but 1 was given:IPython按钮onclick参数咨询
解决IPywidgets按钮onclick事件报错:"takes 0 positional arguments but 1 was given"
这个报错的核心原因很明确:当你给IPywidgets的按钮绑定on_click回调函数时,框架会自动把触发点击事件的按钮实例对象作为参数传递给你的回调函数,但你的onclick()函数定义没有预留接收这个参数的位置,所以才会抛出参数不匹配的错误。
具体来说,onclick事件传递的参数是什么?
传递的就是你创建的那个Button对象(也就是代码里的b)。这个设计是为了让你在回调函数里可以直接操作触发事件的控件——比如修改按钮的文本、样式,或者在多个按钮共用同一个回调时,区分是哪个按钮被点击了。
修正后的代码示例
只需要给你的onclick函数添加一个参数(参数名可以自定义,比如btn、sender都可以):
from IPython.display import display import ipywidgets as widgets b = widgets.Button(description='Click Me!') display(b) # 添加参数接收按钮对象 def onclick(btn): print('fgh') # 额外示例:打印按钮的描述文本 print(f'被点击的按钮描述:{btn.description}') b.on_click(onclick)
这样修改后,点击按钮就不会再报错了,而且你还能通过这个参数对按钮进行更多操作。
内容的提问来源于stack exchange,提问作者Siddharth Yadav
相关产品推荐
相关产品推荐

