标签: ipywidgets

如何在 ipywidgets 中分离模型和视图?

考虑一个简单的外汇计算器应用程序的示例。

我可以使用以下方法定义我的模型traitlets

from traitlets import HasTraits, Float, observe, Enum
import math

class FXModel(HasTraits):
    domestic_qty = Float()
    foreign_qty = Float()
    fx_rate  = Float(float('nan')) # in units of domestic_qty/foreign_qty
    lock = Enum(['domestic', 'foreign'], default_value='domestic')
    _calculating = Enum([None, 'domestic', 'foreign'], default_value=None)

    def calc_foreign(self):
        if not math.isnan(self.fx_rate):
            self._calculating = 'foreign'
            self.foreign_qty = self.domestic_qty / self.fx_rate
            self._calculating = None

    def calc_domestic(self):
        if not math.isnan(self.fx_rate):
            self._calculating = 'domestic'
            self.domestic_qty = self.foreign_qty * self.fx_rate
            self._calculating = None

    @observe('domestic_qty')
    def on_domestic(self, change):
        if self._calculating is None: …
Run Code Online (Sandbox Code Playgroud)

python model-view-controller enaml ipywidgets

2
推荐指数
1
解决办法
797
查看次数

Python onclick按钮小部件返回对象

我正在尝试使用 python 在 jupyter 笔记本中构建文件/数据选择器。我的想法是,我使用 multipleSelect 小部件选择文件中的一些文件和数据通道,然后使用按钮返回一个数据帧。

如何访问 df_object?

#stack example
from ipywidgets import widgets
from IPython.display import display
from IPython.display import clear_output
import pandas as pd
import numpy as np
filenames = ["file1", "file2"]
file_dict = {
    "file1":pd.DataFrame(np.arange(5)),
    "file2":pd.DataFrame(np.arange(10,15))
}

def data_selection():
    sel_file = widgets.SelectMultiple(description="Files",
    options=filenames)
    display(sel_file)

    button = widgets.Button(description="OK")
    display(button)            

    def on_button_clicked(button):
        clear_output(wait=True) #clears the previous output
        display(sel_file) #displays new selection window
        display(button) #displays new button
        for f in sel_file.value:
            print (f)
            display (file_dict[f])
            #global df_object #would be …
Run Code Online (Sandbox Code Playgroud)

python ipywidgets

2
推荐指数
1
解决办法
6212
查看次数

ipywidgets 动态创建复选框和选择数据

我想创建一个复选框列表,以便用户可以从数据列表中进行选择。我已经为每条数据创建了复选框,现在我希望勾选这些复选框以将数据添加到列表中。

import ipywidgets as widgets

data = ["data1", "data2", "data3", "data4"]

selected_data = []

checkboxes = [widgets.Checkbox(value=False, description=label) for label in data]

widgets.VBox(children=checkboxes)
Run Code Online (Sandbox Code Playgroud)

我想做一些类似的事情

def add_to_selected(d):
    selected_data.append(d)

checkboxes[0].observe(add_to_selected)
Run Code Online (Sandbox Code Playgroud)

这将向列表添加一个值selected_data。我不知道如何让 VBox 中的复选框表现得像这样。

python ipython jupyter-notebook ipywidgets

2
推荐指数
1
解决办法
1万
查看次数

使用 jupyter-matplotlib 时删除工具栏和图形标题

我正在使用 jupyter-matplotlib 将图表作为小部件嵌入到基于 jupyter 小部件的仪表板中。但是,我想禁用交互式工具栏和自动添加的图形标题。

作为一个简单的示例,下面创建了一个空图形,但它仍然具有交互式工具栏和图形标题。

%matplotlib widget

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
Run Code Online (Sandbox Code Playgroud)

我想删除工具栏和图形标题以及在绘图周围添加的任何其他填充,我可能看不到。

python ipywidgets

2
推荐指数
1
解决办法
2836
查看次数

如何从 ipywidgets 输出返回 pandas 数据帧

我正在 jupyter 笔记本中处理一个数据集,我希望能够以 ipywidgets 输出中返回的数据帧的形式访问该数据。

我尝试过多种选择,但我一生都无法弄清楚如何访问过滤后的结果。

这是设置过滤器和列表框的代码。包含所有代码的完整笔记本在 这里

import pandas as pd
import numpy as np
import ipywidgets as widgets
from ipywidgets import Layout, AppLayout
from IPython.display import display
import functools
 
data = {'year': ['2000', '2000','2000','2000','2001','2001','2001','2001', '2002',  '2002', '2002', '2002',
                 '2003','2003','2003','2003','2004', '2004','2004','2004', '2005', '2005', '2005', '2005', 
                 '2006', '2006', '2006', '2006', '2006', '2007', '2007', '2007', '2007', '2008', '2008', '2008', '2008',
                 '2009', '2009', '2009', '2009'],
        
        'purpose':['Holiday', 'Business', 'VFR', 'Study', 'Holiday', 'Business', 'VFR', 'Study', 'Holiday', 'Business',
                   'VFR', 'Study', 'Holiday', 'Business', 'VFR', 'Study', 'Holiday', …
Run Code Online (Sandbox Code Playgroud)

dataframe python-3.x pandas jupyter-notebook ipywidgets

2
推荐指数
1
解决办法
3266
查看次数

链接 ipython 小部件下拉列表和滑块值

我“理解”如何将文本框链接到滑块(“理解”我的意思是如何使其工作):

from traitlets import link

a = widgets.FloatText(value=4.)
b = widgets.FloatSlider(min=3,max=7,step=0.23,value=4.)
display(a,b)

mylink = link((a, 'value'), (b, 'value'))
Run Code Online (Sandbox Code Playgroud)

这会导致如下结果:

链接小部件

但有什么办法,我怎么可以将一个下拉框,其值会list_items = ('case1', 'case2', 'case3')FloatSlider,对应的值是如(3.4, 5.4, 6.7)

python ipython-notebook jupyter-notebook ipywidgets

1
推荐指数
1
解决办法
1952
查看次数

Ipywidgets Jupyter Notebook交互忽略参数

有没有办法interact(f)忽略其中的某些论点f?我相信我有一个用于传递数据框的默认参数的事实,对此感到困惑。这是我的功能:

def show_stats(start,end,df_pnl=df_pnl):
    mask = df_pnl['Fulldate'] >= start & df_pnl['FullDate'] <= end
    df_pnl = df_pnl[mask]
    #do some more transformations here
    display(df_pnl)
Run Code Online (Sandbox Code Playgroud)

这是我想要做的:

interact(show_stats,start=start_str,end=today_str)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

在此处输入图片说明

我假设它interact以某种方式更改df_pnl为字符串(因为它在交互输出中提供了列标题的下拉列表),但失败了,因为它随后尝试对df_pnl['Fulldate'].....字符串执行操作,从而导致显示错误。

我该如何解决?我可以从函数中排除该参数,同时使它继续在正确的数据帧上工作吗?交互中是否可以忽略函数中的某些参数?

谢谢

python-3.x ipython-notebook jupyter jupyter-notebook ipywidgets

1
推荐指数
1
解决办法
680
查看次数

Jupyter:如何在函数中打印到单元格,从 JavaScript 回调?

我的问题是关于交互式 Jupyter 笔记本。

我想显示 JavaScript 按钮并在单击按钮时将某些内容打印到单元格。

我们可以使用 ipywidgets 轻松做到这一点:

def OnClick(b=None): print 'qq'
b = widgets.Button(description='Button')
b.on_click(OnClick)
display(b)
Run Code Online (Sandbox Code Playgroud)

但是当我们跳转到纯 JavaScript 时,事情就出错了。即我有 JavaScript 按钮,在 on_click() 事件处理程序中我使用内核交互,如:

var kernel = IPython.notebook.kernel;
kernel.execute('onClick()');         
Run Code Online (Sandbox Code Playgroud)

回调被调用成功(我通过哔声检查),但打印在单元格中没有输出,其中显示按钮。所以我想应该有一些魔法(就像 Python 世界中的一切!)来访问打印区域,你能帮我施展它吗?

ipython ipython-notebook jupyter jupyter-notebook ipywidgets

1
推荐指数
1
解决办法
1259
查看次数

如何减少 100px 以下的 ipywidget 复选框占用的空间?

不管我做什么,似乎 an 的最小宽度ipywidgets.Checkbox是 100px。任何更小的小部件都不会显示。与其他小部件分组时似乎浪费空间ipywidgets.HBox

import ipywidgets as ipyw
ly = dict(margin='0px', border='solid', max_width='100px')
w = ipyw.Checkbox(value=True, layout=ly)
display(w)
Run Code Online (Sandbox Code Playgroud)

默认情况下,小部件也是右对齐的。我不知道如何改变理由。

有没有人想出减少占用空间的方法?

checkbox ipywidgets

1
推荐指数
1
解决办法
949
查看次数

如何在 Jupyter Notebook 中显示来自 API 响应的图像?

我在 Jupyter Notebook 中有一个 Azure Maps API 调用,该调用返回 .png 格式的地图图块。该调用效果很好,但我不知道如何将其显示为图像而不是二进制文本。

\n\n

- API 调用:

\n\n
import requests\nfrom ipywidgets import Image\n\nurl = "https://atlas.microsoft.com/map/static/png"\n\nquerystring = {\n    "api-version":"1.0",\n    "subscription-key":"<myRedactedAPIkey>",\n    "layer":"basic",\n    "zoom":"5",\n    "center":"-122.3950336,47.566848",\n    "height":"600",\n    "width":"600",\n    "pins":"default||-121.95066667 45.9135|-121.062 46.707",\n    "format":"png",\n    "path":"ra300||-122.3950336 47.566848"\n}\n\npayload = ""\nheaders = {\n    \'cache-control\': "no-cache"\n    }\n\nresponse = requests.request("GET", url, data=payload, headers=headers, params=querystring)\n\nprint(response.text)\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是:

\n\n
\xef\xbf\xbdPNG\n\nIHDRX\xef\xbf\xbdf\xef\xbf\xbd\xef\xbf\xbdsRGB\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdgAMA\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbda    pHYs\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdo\xef\xbf\xbdd\xef\xbf\xbd\xef\xbf\xbdIDATx^\xef\xbf\xbd\xef\xbf\xbdwt,K~\xef\xbf\xbd  \xef\xbf\xbd2\xc3\x95YqGg4+\xef\xbf\xbdiGsVgGg5Z\xef\xbf\xbd\xd1\x9c]IT\xef\xbf\xbdRs9\\J\xe4\x88\xa44r$r%\xef\xbf\xbda\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdnv\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd}\xef\xbf\xbd\xef\xbf\xbdw\xcd\xbb\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd{[\xef\xbf\xbdBy\xef\xbf\xbd20U\\\xef\xbf\xbd6\xef\xbf\xbd\xef\xbf\xbd@T"\n\xef\xbf\xbd\xef\xbf\xbd\n\xef\xbf\xbdA\xef\xbf\xbdE\xef\xbf\xbd\xef\xbf\xbd\xd6\xb5\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd|\xef\xbf\xbd%\xdb\xb6\xef\xbf\xbd\xef\xbf\xbdO\xef\xbf\xbdN\xef\xbf\xbd#\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbddX\xef\xbf\xbd\xef\xbf\xbdF\xef\xbf\xbd\xef\xbf\xbdY\xef\xbf\xbdp\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdy\xef\xbf\xbdl3\xef\xbf\xbdT\xef\xbf\xbd8;\xef\xbf\xbdY\xef\xbf\xbdp\xef\xbf\xbdO\xd2\x89#\xef\xbf\xbd\xd5\xbe8\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdyf\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd+5.\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd@0\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdq\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdJ\xde\x8c\xef\xbf\xbdk\xef\xbf\xbd\xef\xbf\xbd(\xef\xbf\xbd5\xef\xbf\xbd\xd0\x9e\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdu\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdgBl\xef\xbf\xbd=\xef\xbf\xbdE\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd@\xef\xbf\xbdJ\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdm=f\xef\xbf\xbdk&h\xef\xbf\xbd\xef\xbf\xbd^\xef\xbf\xbd\xef\xbf\xbdZ\xef\xbf\xbd\xef\xbf\xbdMs\xef\xbf\xbd\xef\xbf\xbd\xcc\x8a\\\xef\xbf\xbdJ\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdif\xef\xbf\xbd\xef\xbf\xbdC\xef\xbf\xbd\xef\xbf\xbd:2_ <etc.>\n
Run Code Online (Sandbox Code Playgroud)\n\n

想:

\n\n

在此输入图像描述

\n\n

有什么建议吗?谢谢。

\n\n

EDIT2:这是有效的查询。感谢大家的帮助。

\n\n
import requests\nfrom IPython.display import Image, display\n\nurl = "https://atlas.microsoft.com/map/static/png"\npayload = ""\nquerystring = {\n        "api-version":"1.0",\n        "subscription-key":"<myApiKeyRedacted>",\n …
Run Code Online (Sandbox Code Playgroud)

png image jupyter-notebook ipywidgets azure-maps

1
推荐指数
1
解决办法
3653
查看次数

为什么 ipywidget 按钮调用的 my 函数不返回输出?

我正在使用按钮调用函数,但函数的输出似乎没有保存。

我正在创建一个交互式 jupyter 笔记本,其设计为在单击按钮时执行功能。例如,第一个按钮称为“ Get data”,它将创建新变量。然后第二个按钮“ Analyze data”将对变量进行一些分析。问题是“ Get data”的输出没有保存在函数之外。

# GET DATA
get_data_button = widgets.Button(description='Get Data')

def get_data(b):

    data = 10
    print(data)

    return data

# DISPLAY BUTTON
get_data_button.on_click(get_data)
display(get_data_button)
Run Code Online (Sandbox Code Playgroud)

我期待在我可以做的功能之后

print(data)
Run Code Online (Sandbox Code Playgroud)

并返回 10

相反,它说:

名称“数据”未定义

python function button jupyter-notebook ipywidgets

1
推荐指数
1
解决办法
4346
查看次数

无法从 Spyder 中的 IPython.html.widgets 导入小部件

我正在使用spyder 来运行我的代码。

from Ipython.html.widgets import interact, ButtonWidget
Run Code Online (Sandbox Code Playgroud)

我尝试将 Ipython.html.widgets 替换为 ipywidgets 并执行它。它让我回想起:

from ipywidgets import interact, ButtonWidget

ImportError: cannot import name ButtonWidget"
Run Code Online (Sandbox Code Playgroud)

python ipython spyder ipywidgets

0
推荐指数
1
解决办法
4207
查看次数