- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我们假设以下问题:我们有一个 Ipywidget 按钮和一个进度条。单击按钮时,将执行函数 work(),它只会填充进度条直到完成,然后反转过程并将其清空。就目前而言,这样的功能会持续运行。以下代码片段提供了相应的 MWE:
# importing packages.
from IPython.display import display
import ipywidgets as widgets
import time
import functools
# setting 'progress', 'start_button' and 'Hbox' variables.
progress = widgets.FloatProgress(value=0.0, min=0.0, max=1.0)
start_button = widgets.Button(description="start fill")
Hbox = widgets.HBox(children=[start_button, progress])
# defining 'on_button_clicked_start()' function; executes 'work()' function.
def on_button_clicked_start(b, start_button, progress):
work(progress)
# call to 'on_button_clicked_start()' function when clicking the button.
start_button.on_click(functools.partial(on_button_clicked_start, start_button=start_button, progress=progress))
# defining 'work()' function.
def work(progress):
total = 100
i = 0
# while roop for continuous run.
while True:
# while loop for filling the progress bar.
while progress.value < 1.0:
time.sleep(0.01)
i += 1
progress.value = float(i)/total
# while loop for emptying the progress bar.
while progress.value > 0.0:
time.sleep(0.01)
i -= 1
progress.value = float(i)/total
# display statement.
display(Hbox)
目标是包含“停止”和“恢复”按钮,以便在单击第一个按钮时中断 while 循环,并在按下第二个按钮时恢复执行。这可以在不使用线程、多处理或异步性的情况下完成吗?
最佳答案
这是我通过线程包并基于 https://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Asynchronous.html 中给出的后台工作小部件示例得出的答案。 .它肯定没有优化,并且可能不符合良好实践。欢迎任何想出更好答案的人提供。
# importing packages.
import threading
from IPython.display import display
import ipywidgets as widgets
import time
# defining progress bar 'progress', start, stop and resume buttons
# 'start_button', 'stop_button' and 'resume_button', and horizontal
# box 'Hbox'.
progress = widgets.FloatProgress(value=0.0, min=0.0, max=1.0)
start_button = widgets.Button(description="start fill")
stop_button = widgets.Button(description="stop fill/empty")
resume_button = widgets.Button(description="resume fill/empty")
Hbox = widgets.HBox(children=[start_button, stop_button, resume_button, progress])
# defining boolean flags 'pause' and 'resume'.
pause = False
restart = False
# defining 'on_button_clicked_start()' function.
def on_button_clicked_start(b):
# setting global variables.
global pause
global thread
global restart
# conditinoal for checking whether the thread is alive;
# if it isn't, then start it.
if not thread.is_alive():
thread.start()
# else, pause and set 'restart' to True for setting
# progress bar values to 0.
else:
pause = True
restart = True
time.sleep(0.1)
restart = False
# conditional for changing boolean flag 'pause'.
if pause:
pause = not pause
# defining 'on_button_clicked_stop()' function.
def on_button_clicked_stop(b):
# defining global variables.
global pause
# conditional for changing boolean flag 'pause'.
if not pause:
pause = not pause
# defining 'on_button_clicked_resume()' function.
def on_button_clicked_resume(b):
# defining global variables.
global pause
global restart
# conditional for changing boolean flags 'pause' and 'restart'
# if necessary.
if pause:
if restart:
restart = False
pause = not pause
# call to 'on_button_clicked_start()' function when clicking the button.
start_button.on_click(on_button_clicked_start)
# call to 'on_button_clicked_stop()' function when clicking the button.
stop_button.on_click(on_button_clicked_stop)
# call to 'on_button_clicked_resume()' function when clicking the button.
resume_button.on_click(on_button_clicked_resume)
# defining the 'work()' function.
def work(progress):
# setting global variables.
global pause
i = 0
i_m1 = 0
# setting 'total' variable.
total = 100
# infinite loop.
while True:
# stop/resume conditional.
if not pause:
# filling the progress bar.
if (i == 0) or i > i_m1 and not pause:
time.sleep(0.1)
if i == i_m1:
pass
else:
i_m1 = i
i += 1
progress.value = float(i)/total
# emptying the progress bar.
if (i == 101) or i < i_m1 and not pause:
time.sleep(0.1)
if i == i_m1:
pass
else:
i_m1 = i
i -= 1
progress.value = float(i)/total
else:
if restart:
i = 0
i_m1 = 0
# setting the thread.
thread = threading.Thread(target=work, args=(progress,))
# displaying statement.
display(Hbox)
关于python - Ipywidgets 生态系统中用于中断循环的停止按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64282319/
是否可以使 ipywidget 交互的输入表单更大?例如,当我使用以下代码时,该字段对于标题来说太小了,看起来很乱。 # python code to run in jupyter notebook
我无法理解 IPython display 上 update 的功能。 看来要更新小部件需要在顶层实例化,并且不能从 ipywidget 的回调中实例化。 这是由 ipywidget Button 调
ipython 小部件和交互式对象都有 observe() 方法。 (请参阅打印语句的结果。)通过以下示例,我可以确认 observe() 方法在 slider 小部件上的操作,但不能在交互式(即)对
我创建了一个小示例,它显示了工作情况和非工作情况。工作示例, import ipywidgets as widgets selected = {} a = widgets.Dropdown(descr
让我们假设以下问题:我们有一个 Ipywidget 按钮和一个进度条。单击按钮时,将执行函数 work(),它只会填充进度条直到完成,然后反转过程并将其清空。就目前而言,这样的功能会持续运行。以下代码
我正在使用交互式 ipywidget 下拉菜单来过滤一定数量的数据并用 plotly 绘制图形。 我的问题是下拉小部件的更新:这里是一个简化的例子: import ipywidgets as
我正在尝试在到达所有边缘的按钮上放置一个“+”号。这是一个最小的示例,来自 Jupyter 笔记本,首先是样式: %%html .button_style{ font-size:155px;
我在 IPython 中使用小部件,它允许用户重复搜索短语并在另一个小部件(选择小部件)中查看结果(不同的标题),然后选择其中一个结果。 简而言之: search_text = widgets.Tex
我想创建一个复选框列表,以便用户可以从数据列表中进行选择。我已经为每条数据创建了复选框,现在我希望勾选这些复选框以将数据添加到列表中。 import ipywidgets as widgets dat
我有一个来自 glob.glob 的 csv 文件列表。每个 csv 用于生成一个图形。我想使用 ipywidget 下拉菜单,以便仅绘制所选的文件。 import glob import panda
我正在使用ipywidgets创建一个简短的表单,显示两个字段:图像的预期宽度和高度。 我想添加一个复选框,以便如果选中该框,则会从文件加载信息。 如果选中该框,则会出现一个文本区域(或文件选择器),
我正在尝试从在 Python 3.6 中运行 Jupyter Notebooks 的 Microsoft Azure Notebooks 中的 ipywidgets 小部件获取输出。但是,当我得到它们
我正在使用 ipywidgets.widgets.Checkbox。有没有办法处理复选框事件?请帮忙。我是初学者。 编辑:如何创建复选框列表? 最佳答案 没有任何直接事件,但您可以使用observe
我制作了一个图形,其中包含分别基于随机正态分布、 Gamma 分布、指数分布和均匀分布的直方图的四个子图。我使用 matplotlib 和 Jupyter Notebook 制作的。它是通过 ipyw
我想用 ipywidgets 制作一个交互式模块。到目前为止一切顺利,但我被卡住了。我想根据特定情况隐藏某个 ipywidget 对象的可见性,并且我希望我打印的文本显示在小部件上方并停留在那里。 d
我想更改 ipywidget ToggleButton 的按钮颜色。在文档中它被描述为: widgets.ToggleButtons( options=['Slow', 'Regular',
我有一个下拉菜单,其中显示了一些可能的“周期”。这些实际上是包含一些数据的 .csv 文件。然后我有另一个下拉列表应该显示这个 .csv 文件中的所有变量。因此,第二个下拉列表应根据第一个下拉列表中选
我一直在尝试在更改 ipywidget 后自动更新变量并运行代码片段。 到目前为止,我找到的唯一部分解决方案是按照 github ( here ) 上的示例声明一个全局变量类型: import ipy
有没有办法控制 ipywidgets 的放置和对齐(在 jupyter notebook 中)? from ipywidgets import widgets from IPython.display
我正在尝试使用 ipywidgets 按钮进行连续的按钮点击过程。 点击按钮 1 应该清除按钮 1 并显示按钮 2 等... 看起来wait变量的引入让我的purge函数无法访问,我不明白为什么。 f
我是一名优秀的程序员,十分优秀!