Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在IPython小部件中动态添加和删除列表项

在IPython小部件中动态添加和删除列表项
EN

Stack Overflow用户
提问于 2020-11-19 13:37:20
回答 1查看 391关注 0票数 1

我正在尝试使用ipywidgets在Ipython Jupyter Notebook中实现一个基本的待办事项列表应用。

我可以很容易地实现将项目添加到我的列表中的功能,但是,如果单击“删除”按钮,我无法正确处理现有项目的删除。整个代码在单个单元中运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import ipywidgets as widgets
from ipywidgets import VBox, HBox, Text, Button
from IPython.display import display

todo = []

def completed_sentence(sentence): 
    """ To display existing notes with a 'Remove' button """
    sentenceField = Text(value=sentence)
    removeButton = Button(description='Remove',
                          button_style='danger')
    return HBox([sentenceField, removeButton])

def render_sentences(_):
    """ To update the view """
    global a,b
    if a.value != '':
        todo.append(a.value)
    a.value = ''
        todoWidget.children = tuple\
            ([VBox([VBox([completed_sentence(each) 
                          for each in todo]),
                    HBox([a, b])])])
    
# Setting up a basic view- with an empty field and a button
a = widgets.Text(value='')
b = widgets.Button(description='Add')                                 
b.on_click(render_sentences)

todoWidget = widgets.HBox([a, b])
display(todoWidget)

现在,为了能够删除句子,我将函数completed_sentence的定义更新如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def completed_sentence(sentence):
    """ To display existing notes """
    def remove_sentence(_):
        global render_sentences
        try:
            if todo.index(sentenceField.value) >= 0:
                todo.remove(sentenceField.value)
                render_sentences()
        except:
            return 
                
    sentenceField = Text(value=sentence)
    removeButton = Button(description='Remove', button_style='danger')
    removeButton.on_click(remove_sentence)
    return HBox([sentenceField, removeButton])

但是现在,这有一个问题,它对render_sentences的调用被忽略了!如果您愿意,使用Ipython小部件来处理这种“反应式”编程的最佳方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-11-19 13:52:00

更新completed_sentence的定义似乎可以完成这项工作。但它仍然是一个谜,为什么原始的定义不起作用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def completed_sentence(sentence):
    def remove_sentence(_):
        global render_sentences
        try:
            if todo.index(sentenceField.value) >= 0:
                todo.remove(sentenceField.value)
        except:
            pass
        render_sentences(_)
                
    sentenceField = Text(value=sentence)
    removeButton = Button(description='Remove', button_style='danger')
    removeButton.on_click(remove_sentence)
    sentence_view = HBox([sentenceField, removeButton])
    return sentence_view
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64912840

复制
相关文章
javascript动态添加和删除表格
在web端开发时,动态添加和删除表格是很常见的,这里简单给出一点代码以供参考: .. code:: html <script type="text/javascript"> var rowIndex = 0; function addOneLineOnClick() { var row=userList.insertRow(userList.rows.length); var col = row.insertCell(0); col.inner
the5fire
2019/02/28
2.5K0
jQuery实现动态添加和删除(点击按钮添加在页面添加和删除元素)
1:点击添加按钮弹出弹框,form表单可以填写相关的信息 2:点击保存按钮,相关信息会显示在界面的列表里
王小婷
2019/02/26
7.3K0
【说站】python迭代中删除列表项目
2、通过分配给slice somelist[:],改变现有列表以仅包含想要的项目。
很酷的站长
2022/11/24
1.6K0
【说站】python迭代中删除列表项目
Qt Designer基本控件介绍——Item Views(表项视图)和Item Widgets(部件)
两者的关系: Item Views(Model-Based)类内的控件是Item Widgets(Item-Based)内对应控件的父类, 如QTreeWidget是从QTreeView派生的。 ---- 两者的区别: Item Views(Model-Based)的对象进行数据操作相对比较复杂,但处理及展示大数据量时性能高; Item Widgets的数据操作比较简单,但处理及展示大数据量时性能相对低。Item Widgets在开发中没有Item Views灵活,实际上Item Widgets就是在It
Elsa_阿尼
2021/07/09
6.5K0
Qt Designer基本控件介绍——Item Views(表项视图)和Item Widgets(部件)
微信小程序列表项滑动显示删除按钮
微信小程序并没有提供列表控件,所以也没有iOS上惯用的列表项左滑删除的功能,SO只能自己干了。
MJ.Zhou
2018/07/31
1.6K0
微信小程序列表项滑动显示删除按钮
微信小程序并没有提供列表控件,所以也没有iOS上惯用的列表项左滑删除的功能,SO只能自己干了。 原理很简单,用2个层,上面的层显示正常的内容,下面的层显示一个删除按钮,就是记录手指滑动的距离,动态的来
MJ.Zhou
2018/01/04
2.3K0
从DataFrame中删除列
在操作数据的时候,DataFrame对象中删除一个或多个列是常见的操作,并且实现方法较多,然而这中间有很多细节值得关注。
老齐
2021/03/29
7K0
jquery validate动态添加/删除规则
项目中用到了jquery vilidate插件来校验,使用中遇到点小波折,这里跟大家分享一下,希望大家少走一些弯路。很多使用手册里面都会提到最基本的validate()方法,这个在使用时一般不会出现问题,如果有些小伙伴不想输入完成后立即校验可以通过设置下面这几个属性:
johnhuster的分享
2022/03/28
1.9K0
JS动态添加/删除css文件
Jensen_97
2023/07/20
6400
在 WordPress 中如何批量添加、设置和删除一组缓存
我们知道 Memcached 等缓存服务都支持一次请求获取多个数据,这样意味着无须多次连接外部对象缓存服务,可以显著的提升网站的效率。
Denis
2023/04/13
3.3K0
Redis集群环境中添加和删除节点
林老师带你学编程
2018/01/04
2.2K0
Redis集群环境中添加和删除节点
numpy入门-数组中添加和删除元素
**numpy.insert(arr,obj,value,axis=None) **
皮大大
2021/03/02
6.3K0
删除列中的 NULL 值
今天接到一个群友的需求,有一张表的数据如图 1,他希望能通过 SQL 查询出图 2 的结果。
白日梦想家
2020/07/20
9.9K0
删除列中的 NULL 值
jQuery动态添加/删除元素及内容
添加新的 HTML 内容,四种方法:可根据上面的图片来区分四种方法插入元素的位置。
德顺
2019/11/12
7.1K0
原生JS动态添加、删除元素&内容
创建元素 createElement ,创建内容 createTextNode ,添加元素 appendChild
德顺
2019/11/13
27.5K0
QMainWindow 添加中心部件
上几篇文章我们使用 QMainWindow 添加了菜单栏、工具栏、状态栏等控件,他们分别在窗口中起到不同的作用。但千万别忽略了中间位置,因为中间位置是我们用来添加其他控件的位置,如果你直接在对象中new了某些其他控件(比如一个button),那么这个控件会覆盖菜单栏导致不能正常显示。这就需要我们来创建一个中心部件,以保证各个控件之间不会冲突。
我与梦想有个约会
2023/10/20
2350
QMainWindow 添加中心部件
在windows下如何添加、删除和修改静态路由
添加一条路由记录,所有到192.168.100.0/24网段的数据包,都通过2号(网卡)接口走192.168.1.1的网关,优先级为3。
拓荒者
2019/08/27
2.7K0
如何在运行时动态添加和删除Qt Widgets
在油管上看到一篇关于Qt的视频:[How to Add & Remove Qt Widgets Dynamically at Runtime](https://www.youtube.com/watc
ccf19881030
2021/06/29
4K0
如何使用PowerShell批量删除注册表项
卸载了可牛压缩软件以后,发现右键菜单中仍然有可牛压缩的选项。不用想就知道是注册表中有该软件的残留。
卡尔曼和玻尔兹曼谁曼
2022/09/16
1.9K0
点击加载更多

相似问题

在PyQt中动态添加和删除小部件

34

在Razor页中动态添加和删除列表项控件

10

在Tablesorter上动态添加和删除小部件

23

在框布局中动态添加和删除按钮小部件

10

如何删除和添加小部件到动态小部件列表

19
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文