Найти - Пользователи
Полная версия: tkinter идет процесс -окно висит
Начало » GUI » tkinter идет процесс -окно висит
1 2 3
sanodin
4kpt
этапами являются вызовы функции time.sleep(0.5), а действие всего процесса - это работа всего цикла. Я просто в цикл вклиниваю вызов функции update_lab_digit(lab_digit, i).

хитрО…и вместе с тем так просто
4kpt
Рад, что подошло :)
sanodin
а если процесс разбить на на несколько (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
Наконец-то Вы поняли идею. Конечно. Так делать и нужно. Но процессы должны следовать друг за другом, тогда в этом есть смысл. Выполняется проц1, отображается информация (Х% выполнения). Выполняется проц2, снова отображается информация (Х*2% выполнения)…

Но старайтесь разбивать основной процесс хоть приблизительно на равные части, иначе будет бред. Равные, не в смысле строк кода, а в смысле времени выполнения.
4kpt
Если основной процесс выполнения программы нельзя разбить на равные части, то рекомендую делать либо принудительную задержку в малых (по-времени) частях или показывать процент неравномерно (с разным интервалом). Необходимо помнить, что для пользователя индикатор выполнения всегда !!!ВСЕГДА!!! ассоциируется со временем, а не с реальным процессом выполнеия задачи. Т.е. если вы открываете два файла, один 1 мб, а другой 10 мб, то после выполнения открытия первого выводить 50% нельзя (хотя оно, вроде-бы и логично), так как пользователь будет думать, что уже прошла половина 50% времени. А реально прошло только где-то 10%. Необходимо запускать обновление процента несколько раз при открытии второго файла…
Посему индикаторы процесса винды так всех бесят :)
sanodin
появилась идея в файле сделать метки типа “*” и на них выполнять функцию индикатора
сам файл состоит из слов построчно

сваро
пасито
*
дорат
негор

4kpt
Если процесс открытия одного файла и чтение из него - то вариант.
Пугадет только:
sanodin
негор
:)
sanodin
4kpt
Пугадет только:негор
честно,от балды набирал
а вообще вот
абава
абадан
абаджа
абажур
абаз
абаза
абазинский
абазины
абаим
абай
абак
абака
абакан
абакнон
из энциклопедического словаря
sanodin
делаю так
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
Ну вроде так все работает
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)
            
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB