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

Это код, который я написал, и я ожидал, что если пользователь обновит страницу, метки, созданные handle_upload, исчезнут (аналогично тому, как элемент загрузки файла обновляется при обновлении страницы и больше не отображает ранее загруженные файлы ).

from nicegui import ui, events
import os

ui.label("Upload File")
ui.label('(Drag and drop into the box below, or use the "+" button to select a file)')


def handle_upload(file: events.UploadEventArguments) -> None:
    ui.notify(f"uploaded {file.name} to {os.getcwd()}")
    data = file.content.read()
    with open(file.name, "wb") as f:
        f.write(data)
    lines = [line for line in data.splitlines() if line.strip()]
    ui.label("Lines uploaded:")
    for line in lines:
        ui.label(line.decode())

ui.upload(on_upload=handle_upload, auto_upload=True).classes("max-w-full")


ui.run(title="Submit File")

2
nopori 16 Мар 2023 в 21:46

1 ответ

Да, вызов ui.label создает новый ярлык и добавляет его на страницу. Чтобы заменить такие элементы, как метка, новыми, вы можете использовать контейнер и очищать его перед добавлением новых элементов. В следующем примере контейнер output имеет тип ui.column и заполнен меткой «Загруженные строки:», а также содержимым файла:

def handle_upload(file: events.UploadEventArguments) -> None:
    data = file.content.read()
    lines = [line for line in data.splitlines() if line.strip()]
    output.clear()
    with output:
        ui.label('Lines uploaded:')
        for line in lines:
            ui.label(line.decode())

ui.upload(on_upload=handle_upload, auto_upload=True)
output = ui.column()
0
Falko 16 Мар 2023 в 22:31
Отлично, спасибо за помощь!
 – 
nopori
16 Мар 2023 в 23:03