【问题标题】:Ipython Widgets (how to make a timer)Ipython Widgets(如何制作计时器)
【发布时间】:2018-03-01 18:05:28
【问题描述】:

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

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

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

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

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)

【问题讨论】:

    标签: python jupyter-notebook ipython-parallel ipywidgets


    【解决方案1】:

    我找到了解决方案。阅读此doc 了解详情。

    您使用threading 库来使您的更新函数(在我的例子中是每秒更新一次的计时器)单独运行,这样您仍然可以执行其他代码单元。

    另外,我尝试在像这样的简单测试功能上做几个 %%timeit

    [x*=x for i in range(20)]

    看起来让这个计时器小部件在后台运行并没有显着增加执行时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2019-01-14
      • 1970-01-01
      • 2021-08-09
      • 2018-10-07
      相关资源
      最近更新 更多