首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将jupyter微件文本框链接到绘制图形的函数

将jupyter微件文本框链接到绘制图形的函数
EN

Stack Overflow用户
提问于 2020-09-03 10:28:52
回答 1查看 58关注 0票数 0

我正在尝试在Jupyter notebook中构建一个用户界面,该界面能够将一个函数与文本小部件和按钮小部件链接起来。

我的函数为给定股票从开始日期到结束日期的股票价格创建了一个图。函数如下所示

代码语言:javascript
运行
复制
import pandas_datareader as pdr

from datetime import datetime


 def company(ticker):
    strt=datetime(2020,1,1)
    end=datetime.now()
    dat=pdr.get_data_yahoo(ticker, strt, end)
    return dat['Close'].plot(grid=True)

下面的命令绘制苹果股票的价格。

代码语言:javascript
运行
复制
company('AAPL')

现在我创建了一个文本和按钮小部件,如下所示

代码语言:javascript
运行
复制
import ipywidgets as ipw

 box=ipw.Text(
value='Stock handle',
placeholder='Type something',
description='String:',
disabled=False)


 btn=ipw.ToggleButton(
 value=False,
description='Plot',
disabled=False,
button_style='', # 'success', 'info', 'warning', 'danger' or ''
tooltip='Description',
icon='check' # (FontAwesome names without the `fa-` prefix))

我尝试将函数company与box链接如下: box.on_submit(company)

当我在框中写AAPL时,它给出错误"TypeError:类型为'Text‘的对象没有len()“我的目标是创建一个界面,在这个界面中我在框中写下股票的名称(’AAPL‘),然后点击btn,此时股票价格的曲线图就会出现。

任何帮助都是非常感谢的。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-09-03 16:00:07

当您使用on_submit附加一个函数时,整个小部件都将作为参数传递给该函数(而不仅仅是文本值)。因此,在company函数中,ticker实际上是Text小部件的实例。因此出现了错误,因为您不能在小部件上调用len

要获得小部件的文本值,可以使用ticker.value,您应该能够很好地调用len

代码语言:javascript
运行
复制
def print_it(ticker):
#     print(len(ticker))  # raises TypeError, you're calling len on the Text widget
    print(len(ticker.value))   # will work, as you're accessing the `value` of the widget which is a string
    
t = ipywidgets.Text(continuous_update=False)
t.on_submit(print_it)
t

注意:从ipywidgets7.0开始,on_submit方法已被弃用,最好使用use box.observe()来创建盒子,并且在创建盒子时要包含continuous_update=False作为kwarg。使用此方法时,信息字典将传递给您的函数,因此您需要解析出新值并将其打印出来。

代码语言:javascript
运行
复制
def print_it(ticker):
    print(ticker['new'])   # will work, as you're accessing the string value of the widget
    
t = ipywidgets.Text(continuous_update=False)
t.observe(print_it, names='value')
t
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63715939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档