если не работает statment с python виджетом - PullRequest
0 голосов
/ 09 января 2020

Я работаю над Jupyter Notebook, в котором я создаю tab widget в python, используя следующий код:

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. Я хочу, чтобы, когда я нахожусь во вкладке P0 (tab.selected_index ==0), vartest должен быть 0, когда я в P1 (tab.selected_index ==1) vartest должен быть 1.

Чего мне не хватает?

- РЕДАКТИРОВАТЬ -

enter image description here

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Вам необходимо установить 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)
0 голосов
/ 09 января 2020

Вы устанавливаете значения для vartest в операторах if, без объявления vartest "глобально" (т.е. перед операторами if) Следовательно, переменные vartest живут только в блоке if и недоступны после это.

Когда вы вызываете его, он равен нулю, потому что это значение по умолчанию, назначаемое python. Исправлено: объявлять vartest перед оператором if

...