Widget 如何在ipython中使用按钮获取小部件值
我有一个函数createWidgets,其目的是获取字符串列表并为每个字符串创建容器列表->1 container=文本框和复选框。然后将每个容器放入一个大容器中 我试图做的是在容器中附加一个按钮,单击该按钮将获取所有“True”并将所有修改的字符串放入数据帧中Widget 如何在ipython中使用按钮获取小部件值,widget,ipython,ipython-notebook,Widget,Ipython,Ipython Notebook,我有一个函数createWidgets,其目的是获取字符串列表并为每个字符串创建容器列表->1 container=文本框和复选框。然后将每个容器放入一个大容器中 我试图做的是在容器中附加一个按钮,单击该按钮将获取所有“True”并将所有修改的字符串放入数据帧中 widgelist = e.options txtBox_type = 'text_widget' # Define if Area box o regular txtbox bigContainer = cre
widgelist = e.options
txtBox_type = 'text_widget' # Define if Area box o regular txtbox
bigContainer = createWidgets(widgelist, txtBox_type)
Function
def createWidgets(widgelist, txtBox_type):
#containerList = []
i = 0
for k in widgelist:
## Build Container widgets
chBox_Widget = widgets.CheckboxWidget(description = str(i),value = False,)
if txtBox_type == 'textA_widget': # Check wether txtBox should be an area txt box or not.
txt_Widget = widgets.TextareaWidget( description = str(i), value = k)
else:
txt_Widget = widgets.TextWidget( description = str(i), value = k)
container = widgets.ContainerWidget()
container.children = [chBox_Widget, txt_Widget]
containerList.append(container)
i+= 1
button = widgets.ButtonWidget(description = 'Add')
bigContainer = widgets.ContainerWidget()
bigContainer.children = containerList
return bigContainer
我访问了很多网站,花了很多天的时间在这项帮助上,非常感谢只要我能解释这个问题,下面的代码应该会提供一个答案:
将IPython.html.widgets作为小部件导入
从IPython.display导入显示中,清除\u输出
作为pd进口熊猫
df=pd.DataFrame(列=['Thing'])
def createWidgets(widgelist):
##每个CheckboxWidget和TextWidget都包含在一个子部件中。我们使用
##list comprehension可构建这些子窗口小部件的列表。
集装箱清单=[
widgets.ContainerWidget(子项=(widgets.CheckboxWidget(description=k)
TextWidget(值=k)))
[为widgelist中的k]
bigContainer=widgets.ContainerWidget(子类=containerList)
##要将CheckboxWidget与TextWidget排列成一行,我们必须
##首先显示它们,然后删除_类('vbox')并添加_类('hbox')。这
##IPython 2.x版笔记本电脑中的一些笨拙之处有望得到解决
##在版本3.x中被修复。显示bigContainer也会显示它的子项。
显示(大容器)
对于容器列表中的c:
c、 删除_类('vbox')
c、 添加_类(“hbox”)
返回大容器
widgelist=['ThingA','ThingB','ThingC','ThingD']
bigContainer=createWidgets(widgelist,txtBox_类型)
##按钮的回调。单击。
def添加到数据帧(a):
#bigContainer的子对象也是容器,
#每个都有一个CheckboxWidget和第二个
#一个文本小部件。我们迭代它们,然后
#如果选中,将文本添加到数据帧df中,如下所示
#另一行。
对于bigContainer.children中的c:
如果c.children[0]。值:
df.loc[len(df)+1]=(c.children[1].值,)
显示(df)
清除输出()
显示(df)
button=widgets.ButtonWidget(描述='Add')
按钮。单击时(将添加到数据框)
显示(按钮)
下面是窗口小部件区域的屏幕剪辑,并在向数据框添加几行后输出
我本来会设计一些不同的代码来实现这一点,但我试图留下来
靠近您的代码组织。这是jupyternotebooks 4上Ipython3的更新版本 只需重命名:
- widgets.ContainerWidget->widgets.Box
- widgets.CheckboxWidget->widgets.Checkbox
- widgets.TextWidget->widgets.Text
参考资料:[是的,还有更多!添加复选框是一个真正的奖励。我只接受了很少的奖励。我想我不明白的部分是,
回调按钮是如何操作的。单击。
继承bigContainer
?是的,这可能会让人困惑。在回调函数中,将
变量bigContainer
实际上是一个全局变量-您可以看到上面三行定义了它。但是在函数createWidgets(…)
中还有一个bigContainer
的局部变量定义。搜索“python变量范围”带我去,但你会发现更多关于这方面的论述。