Как получить обновленные значения в NiceGUIPython

Программы на Python
Ответить
Anonymous
 Как получить обновленные значения в NiceGUI

Сообщение Anonymous »

Я пишу интерфейс NiceGUI для своего кода на Python.
Я впервые пишу интерфейс, и я не очень привык к концепциям веб-фреймворков.
По сути, использование этого интерфейса заключается в том, чтобы попросить пользователя вставить следующие переменные (я знаю, что диапазон не является подходящим именем переменной):

Код: Выделить всё

variants_text: str
keywords_text: str
seed: int | None
min_articles: int | None
max_articles: int | None
range: int | None
limit: int | None
Это код, который я написал на данный момент (единственная зависимость — nicegui, и для прохождения шага 1 вам понадобится фиктивный файл .txt):
p>

Код: Выделить всё

from nicegui import ui

class ArticleRetrieval:

def __init__(self):

self.page_title = "Article Retrieval"
self.headers()

self.stepper = ui.stepper().props("vertical").classes("w-full")

self.step1_title = "Add input files"
self.step2_title = "Add optional arguments"
self.step3_title = "Retrieve articles"

self.variants_uploaded = False
self.variants_text = None

self.keywords_uploaded = False
self.keywords_text = None

self.seed = None
self.min_articles = None
self.max_articles = None
self.range = None
self.limit = None

self.positive_integer_validator = {
"You can only insert a non-negative integer": self._acceptable_num
}

def _acceptable_num(self, n) ->  bool:
return (n is None) or (n == int(n) and n >=0)

def _variants_uploaded(self, e):
self.variants_uploaded = True
self.variants_text = e.content.readlines()
if self.keywords_uploaded is True:
self.step1_next_button.visible = True

def _keywords_uploaded(self, e):
self.keywords_uploaded = True
self.keywords_text = e.content.readlines()
if self.variants_uploaded is True:
self.step1_next_button.visible = True

def _update_seed(self, e):
self.seed = e.value
self._step2_next_button_visibility()

def _update_min_articles(self, e):
self.min_articles = e.value
self._step2_next_button_visibility()

def _update_max_articles(self, e):
self.max_articles = e.value
self._step2_next_button_visibility()

def _update_range(self, e):
self.range = e.value
self._step2_next_button_visibility()

def _update_limit(self, e):
self.limit = e.value
self._step2_next_button_visibility()

def _step2_next_button_visibility(self):
if all(
self._acceptable_num(x) for x in [
self.seed,
self.min_articles,
self.max_articles,
self.max_articles,
self.limit,
]
):
self.step2_next_button.set_visibility(True)
else:
self.step2_next_button.set_visibility(False)

def _ask_confirm(self):
ui.markdown(
f"""
##### DO YOU CONFIRM THIS DATA?

**variants**: {self.variants_text}

**keywords**: {self.keywords_text}

**seed**: {self.seed}

**min\\_articles**: {self.min_articles}

**max\\_articles**: {self.max_articles}

**range**: {self.range}

**limit**:  {self.limit}

"""
)

def headers(self):
ui.page_title(self.page_title)
ui.markdown(f"#{self.page_title}")

def step1(self):
with ui.step(self.step1_title):
ui.upload(
label="Variants (.txt file)",
max_files=1,
auto_upload=True,
on_upload=self._variants_uploaded,
).props("accept=.txt").classes("max-w-full")

ui.upload(
label="Keywords (.txt file)",
max_files=1,
auto_upload=True,
on_upload=self._keywords_uploaded,
).props("accept=.txt").classes("max-w-full")

with ui.stepper_navigation():
self.step1_next_button = ui.button(
"NEXT",
icon="arrow_forward_ios",
on_click=self.stepper.next
)
self.step1_next_button.visible = False

def step2(self):

with ui.step(self.step2_title):

ui.number(
label="Seed",
validation=self.positive_integer_validator,
on_change=self._update_seed
).props("clearable")
ui.number(
label="Minimum articles",
validation=self.positive_integer_validator,
on_change=self._update_min_articles
).props("clearable")
ui.number(
label="Maximum articles",
validation=self.positive_integer_validator,
on_change=self._update_max_articles
).props("clearable")
ui.number(
label="Range",
validation=self.positive_integer_validator,
on_change=self._update_range
).props("clearable")
ui.number(
label="Limit",
validation=self.positive_integer_validator,
on_change=self._update_limit
).props("clearable")

with ui.stepper_navigation():
self.step2_back_button = ui.button(
"BACK",
icon="arrow_back_ios",
on_click=self.stepper.previous,
)
self.step2_next_button = ui.button(
"NEXT",
icon="arrow_forward_ios",
on_click=self.stepper.next
)
self.step2_next_button.visibility = False

def step3(self):
with ui.step(self.step3_title):
self._ask_confirm()
with ui.stepper_navigation():
ui.button(
"BACK",
icon="arrow_back_ios",
on_click=self.stepper.previous,
)
ui.button(
"RUN",
icon="rocket_launch",
on_click=lambda x: None  # HERE I WILL PERFORM THE ACTUAL JOB
)

def run(self):
with self.stepper:
self.step1()
self.step2()
self.step3()
ui.run()

ArticleRetrieval().run()
Мой вопрос касается метода _ask_confirm.

Он всегда печатает начальные значения атрибутов, те, которые я определил в __init__< /code> (т. е. все None).
Изображение

Мне бы хотелось, чтобы эта строка обновлялась каждый раз, когда я обновляю значения на шаге 1 и шаге 2.
Я не понимаю следующего: что если, например, я изменю метод _update_seed следующим образом

Код: Выделить всё

def _update_seed(self, e):
print(self.seed)
self.seed = e.value
print(self.seed)
self._step2_next_button_visibility()
Он печатает обновленные значения.
Надеюсь, кто-нибудь сможет мне помочь. Спасибо большое.

Подробнее здесь: https://stackoverflow.com/questions/792 ... in-nicegui
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»