sanodin
Март 21, 2013 19:46:06
4kpt
этапами являются вызовы функции time.sleep(0.5), а действие всего процесса - это работа всего цикла. Я просто в цикл вклиниваю вызов функции update_lab_digit(lab_digit, i).
хитрО…и вместе с тем так просто
4kpt
Март 21, 2013 20:17:05
Рад, что подошло :)
sanodin
Март 21, 2013 21:03:20
а если процесс разбить на на несколько (5) и каждый вклинивать между update_lab_digit(lab_digit, i)
проц1
update_lab_digit(lab_digit, i)
проц2
update_lab_digit(lab_digit, i)
проц3
update_lab_digit(lab_digit, i)
и тд?
то есть не многопоточность а просто обработку (файла допустим) разбить файл на пять частей и по обработке каждого индикатор обновлять
4kpt
Март 21, 2013 21:53:47
Наконец-то Вы поняли идею. Конечно. Так делать и нужно. Но процессы должны следовать друг за другом, тогда в этом есть смысл. Выполняется проц1, отображается информация (Х% выполнения). Выполняется проц2, снова отображается информация (Х*2% выполнения)…
Но старайтесь разбивать основной процесс хоть приблизительно на равные части, иначе будет бред. Равные, не в смысле строк кода, а в смысле времени выполнения.
4kpt
Март 21, 2013 21:58:33
Если основной процесс выполнения программы нельзя разбить на равные части, то рекомендую делать либо принудительную задержку в малых (по-времени) частях или показывать процент неравномерно (с разным интервалом). Необходимо помнить, что для пользователя индикатор выполнения всегда !!!ВСЕГДА!!! ассоциируется со временем, а не с реальным процессом выполнеия задачи. Т.е. если вы открываете два файла, один 1 мб, а другой 10 мб, то после выполнения открытия первого выводить 50% нельзя (хотя оно, вроде-бы и логично), так как пользователь будет думать, что уже прошла половина 50% времени. А реально прошло только где-то 10%. Необходимо запускать обновление процента несколько раз при открытии второго файла…
Посему индикаторы процесса винды так всех бесят :)
sanodin
Март 21, 2013 22:15:29
появилась идея в файле сделать метки типа “*” и на них выполнять функцию индикатора
сам файл состоит из слов построчно
сваро
пасито
*
дорат
негор
4kpt
Март 21, 2013 23:14:46
Если процесс открытия одного файла и чтение из него - то вариант.
Пугадет только:
sanodin
негор
:)
sanodin
Март 22, 2013 06:16:47
4kpt
Пугадет только:негор
честно,от балды набирал
а вообще вот
абава
абадан
абаджа
абажур
абаз
абаза
абазинский
абазины
абаим
абай
абак
абака
абакан
абакнон
из энциклопедического словаря
sanodin
Март 22, 2013 07:07:56
делаю так
def update_lab_digit(lab_digit, pos):
lab_digit["text"] = "{0}%".format(20*pos)
def start_work(event=None):
print (t1)
btn["relief"] = "raised"
fr_in = tkinter.Frame(tk)
fr_in.place(relx=0.5, rely=0.3, anchor="center")
lab_text = tkinter.Label(fr_in, text="Process is execute: ")
lab_text.pack(side="left")
lab_digit = tkinter.Label(fr_in, text="0%")
lab_digit.pack(side="left")
tk.update()
#time.sleep(0.1)
update_lab_digit(lab_digit,t1)
t1 это счетчик итераций
но процесс на нуле пока не выдаст результат
sanodin
Март 22, 2013 13:40:06
Ну вроде так все работает
def start_work(event=None):
print (t1)
btn["relief"] = "raised"
fr_in = tkinter.Frame(tk)
fr_in.place(relx=0.5, rely=0.3, anchor="center")
lab_text = tkinter.Label(fr_in, text="Process is execute: ")
lab_text.pack(side="left")
lab_digit = tkinter.Label(fr_in, text="0%")
lab_digit.pack(side="left")
for i in range(1,6):
tk.update()
#time.sleep(0.1)
update_lab_digit(lab_digit,t1)