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