使用创建动画图片有很多惊人的可能性mpld3.但是,似乎所有"移动部件"都是JavaScript的责任.此外,互联网和Stack Overflow上有很多请求,人们直接要求这种可能性.
如何"转储"使用LinkedBrush插件为mpld3选择的点数?
其中有引用,但所有答案都错了,因为他们建议使用某种警报或标题.然而,第二个链接最有趣,因为它建议添加一些HTML表单并按下按钮以从"client-javascript"将数据发送到"server-python".还有一个有趣的笔记本
http://nbviewer.jupyter.org/gist/aflaxman/11156203
这被很多人提到作为灵感来源 - 它将输出配置保存为.html文件.也许这个硬盘交换可以用来通过python进一步处理这些信息.
我发现IPYwidgets,通过大量示例甚至是TRUE交互客户端 - 服务器的可能性,我进一步发现了这一点.从本质上讲,我们可以从基本的滑块和按钮开始,但后来我们看到在此基础上构建了一些更复杂的包:主要是bqplot和其他一些继承的包.
我想要的 - 只是拖放图片上的一些点,然后将它们传递给iPython进行更多的绘图 - 它非常复杂,绝对无法移动到JavaScript.但似乎尽管团队bqplot做了大量工作,但您只能使用一些"预定义"的交互集,因此再次不包括拖放行为.
当我尝试(不是非常深入地)输入mpld3的源代码并修改它并可能与ipywidgets合并时,我遇到很多东西都被弃用了,代码发展得非常快,这与互联网上现有的例子不一致:大多数杨树都很旧,询问也很老.所以我因为混乱而无能为力,许多例子由于缺乏向后兼容性而失败.
摘要.我很高兴,如果有人提供了一些方法来拖放点并将他们的坐标传递给python,但这对我更有帮助 - 是能够以更"抽象的方式"从mpld3传递信息,以便其他案件可以包括在内.
我想知道是否有一种简单的方法来构建一个带有日期时间滑块的iPyWidget.现在很容易在整数或浮点范围上滑动(例如数字1-10,小数0.01,0.02,......).
我想你可以将日期转换为浮点数或整数,使用这些生成某种滑块,然后转换回滑块上显示标签的日期.然而,这似乎很笨拙.有没有人有更顺畅的解决方案?
我在Jupyter笔记本中有一个单选按钮小部件,我想保存选定状态,最好保存在笔记本json中。当我保存笔记本时,这似乎没有发生。重新打开笔记本计算机时,状态会丢失并重置。有没有办法保存状态并重新加载?
如何得到执行的函数的输出on_click由ipywidgets.Button
功能外下一步使用?例如,我想a在每次点击后取回 的值以在 jupyter-notebook 的下一个单元格中使用。到目前为止,我只得到None.
from ipywidgets import Button
def add_num(ex):
a = b+1
print('a = ', a)
return a
b = 1
buttons = Button(description="Load/reload file list")
a = buttons.on_click(add_num)
display(buttons)
print(a)
Run Code Online (Sandbox Code Playgroud) 如何从“ipywidgets”更改用“interact_manual”创建的按钮标签?以及如何更改该按钮的大小和颜色?
这是我写的
from ipywidgets import interact,interact_manual
def HDI_vs_CrimeRate():
#do some thing here
interact_manual(HDI_vs_CrimeRate)
Run Code Online (Sandbox Code Playgroud)
这是按钮的样子: 1 感谢您的帮助
在我的笔记本中,我有一个循环,我想在其中要求用户二进制“是”或“否”。在这个选择上,算法应该继续。
for i in range(n_total):
display.clear_output(wait=True)
waiting_for_scoring = True
print("True or False?")
display.display(widgets.HBox((true_button, false_button)))
a = true_button.on_click(on_true_button)
a = false_button.on_click(on_false_button)
while waiting_for_scoring == True:
#waiting for user input
pass
Run Code Online (Sandbox Code Playgroud)
在小部件 HBox 创建之后,如何使循环等待,并等待用户输入(单击按钮)以继续回答新值?
这是我对按钮的两个功能:
def on_true_button(x):
global waiting_for_scoring
print('NO!!!!')
y_new = 1
waiting_for_scoring = False
return y_new
def on_false_button(x):
global waiting_for_scoring
print('YES')
y_new = 0
waiting_for_scoring = False
return y_new
Run Code Online (Sandbox Code Playgroud)
你能帮我停止循环直到用户按下按钮然后使用这个输入吗?先感谢您
我和 TheInterestedOne在此处提出的问题相同。
我需要为用户创建两个按钮,并建议用户点击循环中的两个按钮之一;以便循环的下一次迭代仅在用户选择之后发生。
我读过这个来源,但我不能让它适用于按钮。我不明白,在使用按钮的情况下,小部件属性如何变化。
from functools import wraps
def yield_for_change(widget, attribute):
def f(iterator):
@wraps(iterator)
def inner():
i = iterator()
def next_i(change):
try:
i.send(change.new)
except StopIteration as e:
widget.unobserve(next_i, attribute)
widget.observe(next_i, attribute) //**button.on_click(on_button_clicked)
may be?**
# start the generator
next(i)
return inner
return f
from ipywidgets import Button
button=Button()
def on_button_clicked():
print("Button clicked.")
@yield_for_change(button, 'value')
def f():
for i in range(10):
print('did work %s'%i)
x = yield
button.on_click(on_button_clicked)
Run Code Online (Sandbox Code Playgroud) 我使用单选按钮和滑块在 Jupyter 笔记本的单元格中有一些代码。我有一个方法,我只想在更改选择时调用它(在单选按钮的情况下);并且仅当滑块被释放时(在滑块的情况下)。
但是,当单选按钮仅更改一次(我相信它会触发 3 次)时,使用 'observe' 方法会触发多次。并且在发生鼠标按下和鼠标抬起时会触发滑块观察方法。
可以更改它以便只调用一次还是我需要使用观察以外的其他东西?
[编辑] 这是使用单选按钮以及选择一次选项时打印的输出的更新示例:
import ipywidgets as widgets
def radio_called(sender):
print('radio_called')
print(sender)
radio = widgets.RadioButtons(options=['option 1', 'option2', 'option3'])
radio.observe(radio_called)
display(radio)
Run Code Online (Sandbox Code Playgroud)
单击一次选项时的打印输出:radio_ called
{'name': '_property_lock', 'old': traitlets.Undefined, 'new': {'index': 1}, 'owner': RadioButtons(options=('option 1', 'option2', 'option3'), value='option 1'), 'type': 'change'}
radio_called
{'name': 'label', 'old': 'option 1', 'new': 'option2', 'owner': RadioButtons(index=1, options=('option 1', 'option2', 'option3'), value='option 1'), 'type': 'change'}
radio_called
{'name': 'value', 'old': 'option 1', 'new': 'option2', 'owner': RadioButtons(index=1, options=('option 1', 'option2', 'option3'), value='option2'), 'type': 'change'} …Run Code Online (Sandbox Code Playgroud) 有一个带有 Jupyterhub 的服务器。它可以通过浏览器进行远程访问(仅限 IP 地址)。用户可以使用 ipywidgets.fileupload 上传大文件(几 GB)。但是我通常不能上传超过 100MB 的文件:文件大约 200MB 上传约 10 分钟。(scp 命令 - 少于 2 分钟。)。文件超过 250MB - 以内核错误结尾(但带有“--debug”的 jupyterhub 不显示任何内容)。
浏览器控制台错误:
API request failed (0): error
:8000/user/aleksandr/api/contents/Untitled1.ipynb:1 Failed to load resource: net::ERR_EMPTY_RESPONSE
main.min.js?v=eef572336006937e9a017afbdebc65fe:24805 Uncaught (in promise) XhrError: error
at wrap_ajax_error (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:24805:29)
at Object.settings.error (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:24861:24)
at u (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:2:27457)
at Object.fireWith [as rejectWith] (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:2:28202)
at k (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:2:77676)
at XMLHttpRequest.<anonymous> (http://192.168.1.49:8000/user/aleksandr/static/notebook/js/main.min.js?v=eef572336006937e9a017afbdebc65fe:2:79882)
wrap_ajax_error @ main.min.js?v=eef572336006937e9a017afbdebc65fe:24805
settings.error @ main.min.js?v=eef572336006937e9a017afbdebc65fe:24861
u @ main.min.js?v=eef572336006937e9a017afbdebc65fe:2
fireWith @ main.min.js?v=eef572336006937e9a017afbdebc65fe:2
k @ main.min.js?v=eef572336006937e9a017afbdebc65fe:2
(anonymous) @ main.min.js?v=eef572336006937e9a017afbdebc65fe:2 …Run Code Online (Sandbox Code Playgroud) 我正在使用pythreejs可视化一些 3D 模型。
在 Jupyter 笔记本上可视化模型时,一切都按预期进行。
但是当尝试将小部件嵌入 HTML 文档时,我面临两个问题:
这是重现错误的代码和上述问题的动画:
from ipywidgets import embed
from pythreejs import *
from IPython.display import display
base = Mesh(
BoxBufferGeometry(20, 0.1, 20),
MeshLambertMaterial(color='green', opacity=0.5, transparent=True),
position=(0, 0, 0),
)
cube = Mesh(
BoxBufferGeometry(10, 10, 10),
MeshLambertMaterial(color='green', opacity=0.5, transparent=False),
position=(0, 5, 0),
)
target = (0, 5, 0)
view_width = 600
view_height = 400
camera = CombinedCamera(position=[60, 60, 60], width=view_width, height=view_height)
camera.mode = 'orthographic'
lights = …Run Code Online (Sandbox Code Playgroud) ipywidgets ×10
python ×8
jupyter ×4
button ×3
python-3.x ×2
widget ×2
asynchronous ×1
ipython ×1
javascript ×1
jupyterhub ×1
mpld3 ×1
pythreejs ×1
three.js ×1