Обновление индикатора выполнения Tkinter - PullRequest
0 голосов
/ 23 мая 2018

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

Мой код показан здесь:

from Tkinter import *
import ttk
import numpy as np

global files
files = np.arange(1,1000000)

def loading():
    global downloaded
    downloaded = 0
    for i in array:
        downloaded +=1

root = Tk()

progress= ttk.Progressbar(root, orient = 'horizontal', maximum = 1000000, value = downloaded, mode = 'determinate')
progress.pack(fill=BOTH)
start = ttk.Button(root,text='start',command=loading)
start.pack(fill=BOTH)

root.mainloop()

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

Код должен запускать функцию загрузки при нажатии кнопки запуска, но это не так.Я был бы очень признателен за любую помощь, которую вы можете оказать мне по этому вопросу =)

1 Ответ

0 голосов
/ 23 мая 2018

В программировании на основе событий (GUI) у вас не может быть блокирующего цикла, как у цикла for.Вы должны установить событие, используя after, чтобы снова запустить функцию.Это хорошо сочетается с итераторами:

from Tkinter import *
import ttk
import numpy as np

root = Tk()

files = iter(np.arange(1,10000))


downloaded = IntVar()
def loading():
    try:
        downloaded.set(next(files)) # update the progress bar
        root.after(1, loading) # call this function again in 1 millisecond
    except StopIteration:
        # the files iterator is exhausted
        root.destroy()

progress= ttk.Progressbar(root, orient = 'horizontal', maximum = 10000, variable=downloaded, mode = 'determinate')
progress.pack(fill=BOTH)
start = ttk.Button(root,text='start',command=loading)
start.pack(fill=BOTH)

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