[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