2011-10-07 26 views
5

Utilizo una GUI de Tkinter para iniciar un proceso de medición y análisis, que básicamente se lleva a cabo con un botón presionado. Dado que esas medidas se pueden tomar un tiempo, he tratado de incluir una barra de progreso, es decir, ésta:Mi GUI de Tkinter es demasiado ... estática?

http://tkinter.unpythonic.net/wiki/ProgressMeter

Pero cuando lo haga iniciar el proceso, mi ventana toda Tkinter convierte en disparate hasta que se realiza la medición y se recarga de alguna manera, con mi barra de progreso configurada también al 100%. Esto no es lo que quería que sucediera.

¿Qué pasó allí? Soy bastante nuevo en esta cosa de programación, así que no tengo todas las herramientas, supongo. ¿Tengo que introducir un hilo separado o algo así, para que la medición y el tkinter mainloop (es eso lo que es?) Se ejecuten simultáneamente? Si es así, ¿cómo hago eso?

Respuesta

0

llamada widget.update()/root_window.update() cada vez que se actualiza la barra de progreso

+1

La actualización es peligrosa para llamar (no tanto peligroso, sino que podría dar lugar a efectos secundarios no deseados). Como regla general, si no sabe por qué es peligroso, no debe llamarlo. Por lo general, 'update_idletasks' es la mejor opción. –

2

Hacer una progressbar

progress = ttk.Progressbar(bottommenuframe, orient=HORIZONTAL, length=100, maximum=190073,  mode='determinate') 
progress.pack(side=RIGHT) 

progress.start() ## this starts the progressbar 

continuación, durante su análisis (estos son fragmentos de mi código que procesa un archivo de 67MB.):

def analysisfunction(): 
    progress.step(1) 
    ##do some analysis 
    root.after(0, analysisFunction) 

    if job == complete: 
     stop 

Como dije, esto funcionará con mi archivo 67MB y tkinter. Espero que ayude un poco :)

Cuestiones relacionadas