[Programación]GUI en python con TkInter...

Horacio Castellini horacio9573 en yahoo.com.ar
Mar Ago 3 16:10:24 ART 2010


> 8<--------8<--------8<--------8<--------8<--------8<--------8<--------

Retomando el tema de la GUI y viendo que esto que me pasaste es lo que busco, te voy haciendo preguntas ya que los tutorial sobre el tema son chotos... así que para empezar viene algunas preguntas..

> from Tkinter import *
> import tkFileDialog
> # los demas imports
> 
> def definir_archivo():
>     """Selecciona el archivo a procesar"""
>     global fe
>     fname = tkFileDialog.askopenfilename()
>     if fname:
>         fe.delete(0, END)
>         fe.insert(0, fname)

Que cuernos estás haciendo acá? "fe" es una lista, en la cual le pasas el descriptor (eso es en C :)) ) a un archivo... porque no lo hiciste así

if fname:
    fe=[]
    fe.append(fname)


> 
> def procesar():
>     """Procesa el archivo e inserta los
> resultados en los campos"""
>     global fe
>     global res
>     fname=fe.get()

porque no fname=fe[0]?

>     if not fname:
>         return
>     # Aca va el calculo
>     # yo pondria asi :
>     # (cum, suav, var, U) =
> procesarImagen(fname)
>     # y procesarImagen deberia retornar una tupla
> con los valores.
>     # Notar que si procesarImagen da un error, en
> el mundo de las
>     # GUI es considerado buena practica hacer un
> cuadro de dialogo
>     # explicando que fallo y permitir reintentar.
> Una forma seria
>     # retornar (None,)*4 y comprobar esa
> condicion.
>     # por ahora simulemos los resultados
>     import random
>     cum  = random.random()
>     suav = random.random()
>     var  = random.random()
>     U    = random.random()
>     # .... fin calculos
>     for e, val in zip(res,[cum, suav, var, U]):
>         e.configure(state="normal")
>         e.delete(0,END)
>         e.insert(END, val)
>         e.configure(state="readonly")
> 

Acá directamente me estoy dando la cabeza contra la pared de como cuerno pasan estos parámetros al frame... 

> def hacerGUI():
>     global res
>     global fe
> 
>     root=Tk()
>     # frame superior con una etiqueta, una
> entrada de texto y un
>     # boton para cargar el archivo
>     ff=Frame(root)
>     fl=Label(ff,text="Archivo a analizar:")
>     fe=Entry(ff)
>     fb=Button(ff,text="...",
> command=definir_archivo)
>     # geometry management
>     fb.grid(row=0, column=2, padx=3)
>     fe.grid(row=0, column=1, padx=3, sticky=EW)
>     fl.grid(row=0, column=0, padx=3)
>     ff.grid_columnconfigure(1, weight=1)
> 
>     # Frame de resultados
>     rf=Frame(root)
>     res=[]
>     for i,txt in
> enumerate(['Entro:','Suavidad:','Var:','U:']):
>         l = Label(rf,text=txt)
>         e = Entry(rf, state="readonly",
> readonlybackground="white",
>            
> selectbackground="#4a6984")
>         res.append(e)
>         l.grid(column=0, row=i,
> sticky=E, pady=3, padx=12)
>         e.grid(column=1, row=i,
> sticky=NSEW, pady=3)
>     rf.grid_columnconfigure(1,weight=1)
>     # frame de control/salida
>     cf=Frame(root)
>     cg=Button(cf, text="Procesar", width=12,
> command=procesar)
>     ce=Button(cf, text="Salir", width=12,
> command=exit)
>     # geometry management
>     cg.grid(column=0, row=0, padx=12, sticky=E)
>     ce.grid(column=1, row=0, padx=12, sticky=W)
>     cf.grid_columnconfigure(0, weight=1)
>     cf.grid_columnconfigure(1, weight=1)
> 
>     # finalmente le damos al geometry manager los
> tres frames
>     ff.pack(fill=X, padx=3, pady=3)
>     cf.pack(expand=1, fill=BOTH, side=BOTTOM,
> pady=3, padx=3)
>     rf.pack(fill=BOTH, expand=1, padx=6, pady=6)
>     # opciones de la ventana:
>     # solo permitimos cambiar el tamanio
> horizontalmente
>     root.wm_resizable(1,0)
>     # titulo de la ventana
>     root.wm_title("SuperProgramejo 1.0")
> 
> hacerGUI()
> mainloop()
> 8<--------8<--------8<--------8<--------8<--------8<--------8<--------
> 
> Saludos
> Emiliano
> _______________________________________________
> Programacion mailing list
> Programacion en lugro.org.ar
> http://lugro.org.ar/mailman/listinfo/programacion
> 


      


Más información sobre la lista de distribución Programacion