Поток AppJar для обновления GUI - PullRequest
0 голосов
/ 31 октября 2018

Я изучал документацию AppJar в течение последних нескольких часов, но я действительно не могу понять, как заставить графический интерфейс обновляться во время обработки данных. Я разделил 4 основные функции на разные потоки, и в потоках я добавил функцию обновления в качестве функции .queue, но графический интерфейс пользователя по-прежнему зависает, пока все не завершится.

Это функция обновления, которую я написал:

label_status = ["Ready"]


def update_label():
    app.setLabel("status_label", label_status[-1])

Затем я разбил процесс на 4 потока, но он ничего не изменил по сравнению с предыдущим. Так что я предполагаю, что упустил что-то довольно очевидное здесь, но не могу найти это.

def press(button):
    """ Process a button press

    Args:
        button: The name of the button. Either Process of Quit
    """
    if button == "Process":
        global label_status
        global output_directory
        global filename_out
        src_file = app.getEntry("input_file")
        output_directory = app.getEntry("output_directory")
        filename_out = app.getEntry("output_name")
        errors, error_msg = validate_inputs(src_file, output_directory, filename_out)
        if errors:
            label_status.append("Error")
            update_label()
            app.errorBox("Error", "\n".join(error_msg), parent=None)
            return label_status
         else:
        #Create single xlsx doc from data
        trimmed_input = src_file[:-4]
        app.thread(create_xlsx_file(trimmed_input))

        # add graphs to excel file
        app.thread(add_graphs())

        #clean temporary files
        app.thread(clean_files())

        #move output.xlsx to location chosen with filename chosen
        app.thread(move_output())

Я попытался обновить графический интерфейс в потоках следующим образом:

def clean_files():
    label_status.append("Cleaning temporary files")
    app.queueFunction(update_label())
    file_path = os.path.join("csv_output/" + "temp*")
    del_files = glob.glob(file_path)
    for files in del_files:
        os.remove(files)

Поскольку я добавляю в список, я вижу, что все статусы добавляются, но пользователю отображаются только первый и последний статусы. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 01 ноября 2018

Похоже, что все ваши звонки на app.thread() и app.queueFunction() сделаны неправильно.

Я думаю, вы должны передавать только имя функции. Но поскольку вы ставите квадратные скобки после имен функций, вы фактически передаете результат этих функций.

Попробуйте, не включая скобки после имен функций, например. app.queueFunction(update_label)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...