[Programación] GUI en python con TkInter...
Horacio Castellini
horacio9573 en yahoo.com.ar
Vie Mayo 21 14:25:49 ART 2010
Holas... como debo portar un código para que sea usado de manera simple
en una máquina con WinXP (con perdón de la palabra) que tiene instalado
ActivePython con el toolkit TkInter. Como la gente no está acostumbrada
a trabajar en modo consola... me pidieron que haga una GUI (de lo cual
manyo poco), he buscado varias plantillas para poder adaptar pero
ninguna me convence... así que paso como debe ser en ASCII-Arte.
El aspecto sería:
-----------------------------------------------------------------------
| __________________________ |
| Archivo a analizar | Ventana de ingreso de texto| !
| -------------------------- |
| |
| Texto de presentación de resultados o errores |
| |
| Botón de salir y finalizar |
-----------------------------------------------------------------------
Donde en la ventana de ingreso de texto se coloca en NA a analizar y que
soporte el cut'n'paste del API... es decir acepto otro código al ejemplo
puesto abajo...
Lo que encontré fue esto par adaptar que no apele a las clases... (que
en python todavía no las cazo) pero hay cosas que no me gustan...
#!/usr/bin/env python
from Tkinter import *
import math
root = Tk() # root (main) window
top = Frame(root) # create frame
top.pack(side='top') # pack frame in main window
# create frame to hold the first widget row:
hwframe = Frame(top)
# this frame (row) is packed from top to bottom (in the top frame):
hwframe.pack(side='top')
# create label in the frame:
font = 'times 18 bold'
hwtext = Label(hwframe, text='Hello, World!', font=font)
hwtext.pack(side='top', pady=20)
# create frame to hold the middle row of widgets:
rframe = Frame(top)
# this frame (row) is packed from top to bottom:
rframe.pack(side='top', padx=10, pady=20)
# create label and entry in the frame and pack from left:
r_label = Label(rframe, text='The sine of')
r_label.pack(side='left')
r = StringVar() # variable to be attached to r_entry
r.set('1.2') # default value
r_entry = Entry(rframe, width=6, textvariable=r)
r_entry.pack(side='left')
s = StringVar() # variable to be attached to s_label
----------------------------------------------
Esto no me gusta, ya que el mecanismo de ingreso de computo lo hace para
una función, y yo tengo un código... (1) que debe adaptarse para este
caso...
---------------------------------------------
def comp_s(event=None):
global s
s.set('%g' % math.sin(float(r.get()))) # construct string
r_entry.bind('<Return>', comp_s)
compute = Button(rframe, text=' equals ', command=comp_s,
relief='flat')
------------------------------------
compute.pack(side='left')
s_label = Label(rframe, textvariable=s, width=12)
s_label.pack(side='left')
# finally, make a quit button:
def quit(event=None):
root.destroy()
quit_button = Button(top, text='Goodbye, GUI World!', command=quit,
background='yellow', foreground='blue')
quit_button.pack(side='top', pady=5, fill='x')
root.bind('<q>', quit)
root.mainloop()
(1) Original... en el GUI la STDIN debe ser la ventana de texto.. y el
STDOUT el cuadro de teto...
#!/usr/bin/env python
import Image
import ImageFont
import ImageDraw
import sys
import math
Uso="Uso: %s archivo_dato" % sys.argv[0]
if len(sys.argv) >2:
print Uso
sys.exit(1)
try:
im=Image.open(sys.argv[1])
except:
print "Error al abrir imagen" % sys.argv[1]
sys.exit(1)
.........
..........
.......
s_tex="%s Entro= %f suavidad= %f var= %f U= %f" %
(sys.argv[1],cum,suav,var,U)
print s_tex
Saludos... y bienvenida será alguna idea...
Más información sobre la lista de distribución Programacion