Ipython Widgets(如何制作计时器)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ipython Widgets(如何制作计时器)相关的知识,希望对你有一定的参考价值。
我制作了这个计时器小部件,它按照我想要的方式工作,但它锁定了笔记本电脑,所以我无法同时执行其他代码单元。
这是我的意思的一个例子:
让小部件在后台执行的任何想法?
如果它有帮助,这里是制作上述小部件的代码:
import ipywidgets as widgets
from IPython.display import display, Javascript
from traitlets import Unicode, validate
import time
class Timer(widgets.DOMWidget):
_view_name = Unicode('HelloView').tag(sync=True)
_view_module = Unicode('hello').tag(sync=True)
_view_module_version = Unicode('0.1.0').tag(sync=True)
value = Unicode('00:00:00').tag(sync=True)
def timeit(self, b, limit=180):
#display(self)
hours = 0
mins = 0
secs = 0
for i in range(1,(limit*60+1)):
if i%60 == 0:
if i%3600 == 0:
secs = 0
mins = 0
hours += 1
else:
secs = 0
mins += 1
else:
secs += 1
time.sleep(1)
self.value = '{hour:02}:{minute:02}:{second:02}'.format(hour=hours,minute=mins,second=secs)
def display_timer(timer):
button = widgets.Button(description="Start Timer", button_style='info')
display(button)
display(timer)
button.on_click(timer.timeit)
答案
我找到了解决方案。请阅读此doc了解详情。
您使用threading
库使您的更新功能(在我的情况下,每秒更新的计时器)单独运行,因此您仍然可以执行其他代码单元。
另外,我尝试在这样的简单测试函数上做几个%%timeit
:
[x*=x for i in range(20)]
看起来在后台运行此计时器小部件并不会导致执行时间显着增加。
以上是关于Ipython Widgets(如何制作计时器)的主要内容,如果未能解决你的问题,请参考以下文章