Ipython Widgets(如何制作计时器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ipython Widgets(如何制作计时器)相关的知识,希望对你有一定的参考价值。

我制作了这个计时器小部件,它按照我想要的方式工作,但它锁定了笔记本电脑,所以我无法同时执行其他代码单元。

这是我的意思的一个例子:

enter image description here

让小部件在后台执行的任何想法?

如果它有帮助,这里是制作上述小部件的代码:

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(如何制作计时器)的主要内容,如果未能解决你的问题,请参考以下文章

AndroidStudio项目制作倒计时模块

如何让应用程序无限期地在后台运行?

如何使视频仅从按钮开始?

如何使用计时器制作动画?

如何在ipython笔记本中嵌入一个网站

SwiftUI - 如何制作启动/停止计时器