Ayuda con barra de progreso en Python
Jacob Nuñez Garcia
tux_in_my_heart en hotmail.com
Mar Feb 6 21:32:16 CET 2007
Primeramente hola a todos, y que se la estén pasando bien y ojala me
puedan ayudar en este problema y si no pues de todos modos agradeceré
su interés.
Bien, mi problema es que estoy creando un programa en Python y
necesito copiar un archivo y necesito mostrar su progreso, esto usando
Python y GTK osea PyGTK pero desde hace una semana que estoy
trabajando en esto y no lo he conseguido aun, este es el código de mi
programa, para que vean mas o menos como están las cosas.
###################################################################
from __future__ import division #Esto hace que no se trunque la
division
import pygtk #Importa el modulo PyGTK
pygtk.require('2.0')
import gtk
import os
class Base:
def delete_event(self, widget, event, data=None):
print "delete event occurred"
return gtk.FALSE
def destroy(self, widget, data=None):
gtk.main_quit()
def copy(self): #Aqui es donde comienza el copiado del archivo
self.file1='/home/jacob/HU3.rar' #El archivo a copiar
self.file2='/home/jacob/prueba.rar' #El archivo de destino
self.file_object = open(self.file1, 'rb') #Abre el archivo de
origen
self.file_dest = open(self.file2, 'wb') #Crea el archivo de destino
self.size=os.path.getsize(self.file1) #Obtiene el tamano del archivo
de origen
for i in range(0,self.size,8192): #Por cada 8192 bytes que hay de 0
hasta el tamano del archivo.
self.percent=(i*100)/(self.size) #Formula para calcular el
porcentaje
if(True): #Mientras sea verdad lo anterior hacer
self.chunk = self.file_object.read(8192)#Lee 8192 bytes
if not self.chunk:#Si no hay bytes
break #Romper el ciclo
self.file_dest.write(self.chunk) #Escribe los 8192 bytes leidos
self.file_object.close()#Cierra el archivo de origen cuando ya se
completo el cilo
self.file_dest.close() #Cierra el archivo de destino cuando ya se
completo el ciclo
return self.percent #retorna el porcentaje
def __init__(self):#La funcion principal de la clase Base
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)#Se crea una ventana
self.window.connect("destroy",self.destroy)#Se conecta a window para
recibir la senal destroy
self.pb = gtk.ProgressBar()#Se crea una progressbar
self.window.add(self.pb)#Se agrega la progressbar a window
self.pb.show() #Se muestra la progressbar
self.pb.set_fraction(self.copy() / 100)#Esto es lo que avanzara la
barra
self.window.show() #Se muestra la ventana.Nota:Si pongo que se
muestre primero
#la ventana pasa lo mismo
def main(self): #Funcion que llama al ciclo de espera de GTK
gtk.main()
print __name__
if __name__ == "__main__":
Base().main()
###################################################################
Mi script si funciona pero no como deberia, al principio no crea la
ventana solo copia el archivo, despues sale la ventana y la progress
pero solo me muestra el porcentaje ya completo y no es asi como quiero
que funcione sino que salga la ventana y vaya avanzando la barra de
progreso mientras
avanza el copiado del archivo. Ojala y me puedan ayudar se los
agradeceria muchisimo.
Atte: Jacob Nuñez Garcia.
_________________________________________________________________
Llamadas grátis de PC a PC [1]Haz clic aquí
References
1. http://g.msn.com/8HMBESMX/2749??PS=47575
Más información sobre la lista de distribución Python-es