IPython小部件-刷新小部件/视图

时间:2019-07-08 00:54:57

标签: python python-3.x jupyter-notebook ipywidgets

我正在尝试使用IPython widgets实现某种形式的表单。禁用小部件时出现行为问题。似乎它不会立即刷新,也不会等到UI刷新。

下面是示例。

# Initialized button and text box
a = widgets.Text(
    value='',
    placeholder=r'Enter path of twix file here (e.g. T:\tri_services\...)',
    description='Twix path:',
    disabled=False,
    layout=textbox_layout
)
btn_convert = widgets.Button(
    description='Convert to NMR Pipe',
    disabled=True,
    button_style='', # 'success', 'info', 'warning', 'danger' or ''
    tooltip='Convert',
    layout=button_layout
)

# Listener on textbox and button
def on_value_change(change):
    btn_convert.disabled = (change['new'] == "")

a.observe(on_value_change, names='value')

def on_button_clicked(b):
    global a, btn_convert
    a.disabled = True
    btn_convert.disabled = True
    try:
        datetime_str = datetime.datetime.now().strftime('%Y%m%d_%H%M%S%f')
        result_path = root_result + datetime_str + ".fid"
        # using pyjulia
        j.eval(f'using TriMRS; twix_to_nmrpipe("{a.value}","{result_path}")')
     except JuliaError as e:
         print(e)
         javascript(f"alert('Please ensure you pass in correct file path');")
    finally:
        a.disabled = False
        a.value = ""

我得到的行为是btn_convertatextbox)在此过程完成后而不是在我想要的之前被禁用。

我也曾尝试将time.sleep放到UI更新之前,但是我似乎并没有解决这个问题。有什么方法可以强制UI / view / widget刷新?

更新

显然显示标签或任何其他元素都会刷新UI,但不会显示您使用的标签/其他元素。这是一个难看的解决方法,所以如果有人可以解决,请告诉我。

但是,在Windows设备上的Chrome上进行的测试非常完美,即按预期禁用了按钮和文本框。我在Ubuntu 18.04中使用Chrome,并且发生了这种奇怪的行为。

0 个答案:

没有答案