Правильный виджет для отображения строки - Метка .Вы можете изменить текст во время выполнения с помощью метода configure
:
self.progress = Label(...)
...
self.progress.configure(text="%s%% completed" % percent)
Во-вторых, вы создаете два корневых окна - admin
и Admin
.И как ни странно, вы кладете список в одну, а кнопки в другую.Тк не предназначен для такой работы.В-третьих, вам нужно вызвать метод mainloop вашего (единственного) корневого окна (например: Admin.mainloop
)
Наконец, что касается вашего комментария о том, что update_idletasks
не работает - пожалуйста, определите «hasn»т работа ".Это фактически обновит дисплей.Чего он не сделает, так это позволит вам взаимодействовать с окном во время его работы.
Я внес изменения в ваш код на основе приведенных выше комментариев (создал только один корень, использовал Label
вместо Listbox
и использовал update_idletasks
, и программа запускалась до конца, загружая песню.
Опасность вызова update
заключается в следующем: что, если вы нажмете кнопку «скачать», когда уже загружаете?произойдет в следующий раз, когда будет вызван update
, нажатие этой кнопки будет обслужено. При обслуживании этого события вы войдете в бесконечный цикл. Пока этот внутренний бесконечный цикл работает, внешний не может работать.первая загрузка.
Надлежащее решение включает в себя один из (по крайней мере) двух методов: один - создать поток для загрузки и периодически отправлять информацию обратно в основной цикл, чтобы он мог обновлять ход выполнения.Во-вторых, использовать уже существующий бесконечный цикл - цикл обработки событий - и выполнять чтение фрагментов однимодновременно помещая задания в очередь событий с after
.
В Интернете есть примеры обоих подходов.