А какой прогресс вы хотите к этой функции прикрутить? Она у вас чтото делает? открывает файл, считывает его,перекодирует, сжимает, записывает. Каким образом вы хотите видеть прогресс этих операций? сколько от общего прогресса должна занимать каждая операция? Например вы делаете CodeRF = CodeOF.read() сколько это в процентах от всей функции??
Честно говоря сомневаюсь что есть каконить модуль который сможет определить заранее сколько будет занимать то или иное действие в вашей процедуре, и выдавать в реальном времени процент выполнения вашей процедуры. Поэтому придеться все делать ручками.
Вариант 1 грубый: можно просто разделить процедуру на несколько частей, например на пять в вашем примере.Прочитали файл - 20%, перекодировали, еще + 20%, ….. переименовали - 100%. При завершении каждой части посылать на прогрессбар сигнал с соответствующим процентом. по типу:
def f(self,p):
CodeOF = open("mypdf.pdf","rb")
CodeRF = CodeOF.read()
CodeOF.close()
p.setValue(20)
#---------------------------
EncodeBase64 = base64.b64encode(CodeRF)
p.setValue(40)
#---------
CompressDATE = zlib.compress(EncodeBase64)
p.setValue(60)
#---------
CodeOF = open("mypdf2.pdf","wb")
CodeOF.write(CompressDATE)
CodeOF.close()
p.setValue(80)
shutil.os.renames("mypdf2.pdf","mypdf.pdf"+r".OzKEY")
p.setValue(100)
ну и вызывать ее соответвенно self.f(progress) вместо for lineNumber, line in enumerate(file):
Вариант 2 мазохистский: все тоже самое + также процесс считывания/записи в процентах считать, Для этого читайте файл не целиком а кусками (блоками или строками), ну и соответвенно передавайте в прогрессбар к-во прочитаного.
Тогда кусок
CodeOF = open("mypdf.pdf","rb")
CodeRF = CodeOF.read()
CodeOF.close()
p.setValue(20)
будет выглядеть вот так
fsize = os.path.getsize('mypdf.pdf') #размер файла котороый читаем
BLOCKSIZE = 1024 #размер блока, котороыми читаем файл
CodeOF = open("mypdf.pdf","rb")
CodeRF = b''
while CodeOF.tell() < fsize:
CodeRF += CodeOF.read(BLOCKSIZE)
# вобще это плохая идея с точки зрения быстродействия, поскольку строки неизменяемые,
# лучше использовать например список, а в конце join-ом обьединить все элементы в один файл.
# но для наглядности сгодиться.
p.setValue(CodeOF.tell()/fsize*20)
# CodeOF.tell()/fsize*20 - ,будет передавать процент считывания файла, полностью считаный файл будет = 20%прогрессбара
CodeOF.close()
Также делаете с записью и перекодировкой, но это уже херня и говнокод. Слишком много лишнего кода. нужно менять всю концепцию..
Переходим к третьему варианту:Читать кусками , сразу прочитаный кусок перкодировать, сжимать и писать в файл, выводить процент выполнения. типа такого:
def f(self,p):
fsize = os.path.getsize('_tqdm.py') #размер файла котороый читаем
BLOCKSIZE = 1024 #размер блока, котороыми читаем файл (взят "с потолка"для примера)
CodeOF = open("mypdf.pdf","rb") # Файл из которого читаем
CodeRF = open("mypdf_out.pdf","ab") # Файл куда пишем
while CodeOF.tell() < fsize:
readBlock = CodeOF.read(BLOCKSIZE) #читаем кусок
base64Block = base64.b64encode(readBlock)
CompressBlock = zlib.compress(base64Block)# Вот тут я не уверен что так правильно.
#Вернее всего так неправильно , но с zlib я не работал не могу сказать как оно должно работать в таком случае.
# Смотрите в сторону compressobj.compress(string) и compressobj.flush(). Както так, экспериментируйте. :)
CodeRF.write(CompressBlock) #пишем сжатый кусок
p.setValue(CodeOF.tell()/fsize*100) # выводим на прогресбар прогресс выполнения, 100% будет = полностью прочитаному, перекодированому, сжатому и записаному файлу.
CodeOF.close()
CodeRF.close()