Принудительное обновление графического интерфейса в kivy

#python #kivy

#python #kivy

Вопрос:

Я пишу приложение на kivy, которое при запуске выполняет вычисления с высокой нагрузкой на процессор. Я хочу, чтобы приложение отображало, что оно делает в данный момент, вместе с прогрессом, однако, поскольку основной цикл еще не завершен, он просто отображает пустой белый экран, пока не закончит работу. Могу ли я заставить kivy обновить интерфейс?

В основном я ищу эквивалент kivy для Tkinter root.update()

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

Заранее спасибо.

Комментарии:

1. Разве вы не должны использовать здесь потоки?

Ответ №1:

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

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

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

Комментарии:

1. Это зависит от того, каковы эти вычисления на самом деле. Потоки почти наверняка являются разумным решением, но вычисления могут легко разложиться на что-то, что может быть постепенно выполнено в обычном событии синхронизации.