#python #kivy
#python #kivy
Вопрос:
Я пишу приложение на kivy, которое при запуске выполняет вычисления с высокой нагрузкой на процессор. Я хочу, чтобы приложение отображало, что оно делает в данный момент, вместе с прогрессом, однако, поскольку основной цикл еще не завершен, он просто отображает пустой белый экран, пока не закончит работу. Могу ли я заставить kivy обновить интерфейс?
В основном я ищу эквивалент kivy для Tkinter root.update()
Я мог бы создать обходной путь, определив ряд функций, каждая из которых вызывает следующую через Clock.schedule_once(nextFunction, 1)
, но это было бы очень неаккуратно.
Заранее спасибо.
Комментарии:
1. Разве вы не должны использовать здесь потоки?
Ответ №1:
Оставляя в стороне вопрос о том, следует ли вам использовать потоковую обработку или что-то еще вместо этого (что, возможно, вам следует), ответ заключается только в том, что вам следует переместить вычисления вашего процессора в другое место. Сначала отобразите что-то простое (т. Е. Верните простой виджет из вашего метода сборки), затем выполните вычисления после этого, например, запланировав их по часам.
В этом случае ваши вычисления все равно будут блокировать графический интерфейс. Вы можете обойти это, выполнив их в потоке или вручную разбив их на небольшие фрагменты, которые можно последовательно запланировать.
Возможно, можно обновить графический интерфейс, вручную вызвав что-то вроде Clock.tick()
, но я не уверен, что это будет работать правильно, и даже если это так, он не сможет отображать графику до их инициализации.
Комментарии:
1. Это зависит от того, каковы эти вычисления на самом деле. Потоки почти наверняка являются разумным решением, но вычисления могут легко разложиться на что-то, что может быть постепенно выполнено в обычном событии синхронизации.