我正在尝试使用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_convert
和a
(textbox
)在此过程完成后而不是在我想要的之前被禁用。
我也曾尝试将time.sleep
放到UI更新之前,但是我似乎并没有解决这个问题。有什么方法可以强制UI / view / widget刷新?
更新
显然显示标签或任何其他元素都会刷新UI,但不会显示您使用的标签/其他元素。这是一个难看的解决方法,所以如果有人可以解决,请告诉我。
但是,在Windows设备上的Chrome上进行的测试非常完美,即按预期禁用了按钮和文本框。我在Ubuntu 18.04中使用Chrome,并且发生了这种奇怪的行为。