Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2013 19:46:06

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

4kpt
этапами являются вызовы функции time.sleep(0.5), а действие всего процесса - это работа всего цикла. Я просто в цикл вклиниваю вызов функции update_lab_digit(lab_digit, i).

хитрО…и вместе с тем так просто

Офлайн

#2 Март 21, 2013 20:17:05

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

Рад, что подошло :)



Офлайн

#3 Март 21, 2013 21:03:20

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

а если процесс разбить на на несколько (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)
и тд?
то есть не многопоточность а просто обработку (файла допустим) разбить файл на пять частей и по обработке каждого индикатор обновлять

Отредактировано sanodin (Март 21, 2013 21:10:37)

Офлайн

#4 Март 21, 2013 21:53:47

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

Наконец-то Вы поняли идею. Конечно. Так делать и нужно. Но процессы должны следовать друг за другом, тогда в этом есть смысл. Выполняется проц1, отображается информация (Х% выполнения). Выполняется проц2, снова отображается информация (Х*2% выполнения)…

Но старайтесь разбивать основной процесс хоть приблизительно на равные части, иначе будет бред. Равные, не в смысле строк кода, а в смысле времени выполнения.



Отредактировано 4kpt (Март 21, 2013 21:54:05)

Офлайн

#5 Март 21, 2013 21:58:33

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

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



Отредактировано 4kpt (Март 21, 2013 22:04:33)

Офлайн

#6 Март 21, 2013 22:15:29

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

появилась идея в файле сделать метки типа “*” и на них выполнять функцию индикатора
сам файл состоит из слов построчно

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

Отредактировано sanodin (Март 21, 2013 22:32:01)

Офлайн

#7 Март 21, 2013 23:14:46

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

Если процесс открытия одного файла и чтение из него - то вариант.
Пугадет только:

sanodin
негор
:)



Офлайн

#8 Март 22, 2013 06:16:47

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

4kpt
Пугадет только:негор
честно,от балды набирал
а вообще вот
абава
абадан
абаджа
абажур
абаз
абаза
абазинский
абазины
абаим
абай
абак
абака
абакан
абакнон
из энциклопедического словаря

Офлайн

#9 Март 22, 2013 07:07:56

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

делаю так

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 это счетчик итераций
но процесс на нуле пока не выдаст результат

Офлайн

#10 Март 22, 2013 13:40:06

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

tkinter идет процесс -окно висит

Ну вроде так все работает

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)
            

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version