if 语句不适用于 python 小部件

if statment not working with python widget

我正在开发一个 Jupyter Notebook,我正在使用以下代码在 python 中创建一个 tab widget

import ipywidgets as widgets

tab_contents = ['P0', 'P1']
children = [widgets.Text(description=name) for name in tab_contents]
tab = widgets.Tab()
tab.children = children
for i in range(len(children)):
    tab.set_title(i, str(i))

if tab.selected_index ==0:
    vartest = 0
else:
    vartest = 1

display(tab)

在不同的单元格中,我通过调用它来检查 vartest 的值

vartest

问题是,独立于我选择的选项卡,vartest 始终为 0。我想要的是,当我在选项卡 P0tab.selected_index ==0)中时,vartest 应该为 0,当我在 P1 (tab.selected_index ==1) vartest 应该是 1.

我错过了什么?

-- 编辑 --

您在 if 语句中设置 vartest 的值,而没有声明 vartest "globally"(即在 if 语句之前) 因此,vartest 变量仅存在于 if 块中,之后不可用。

当您调用它时,它是零,因为这是由 python 指定的默认值。 修复:在 if 语句

之前声明 vartest

你需要设置一个observe来动态改变变量的值:

import ipywidgets as widgets

tab_contents = ['P0', 'P1']
children = [widgets.Text(description=name) for name in tab_contents]
tab = widgets.Tab()
tab.children = children
for i in range(len(children)):
    tab.set_title(i, str(i))

def tab_toggle_var(*args):
    global vartest
    if tab.selected_index ==0:
        vartest = 0
    else:
        vartest = 1
tab.observe(tab_toggle_var)
tab_toggle_var()
display(tab)