Dudas sobre manejo de TKinter

visualnex visualnex en tutopia.com
Dom Ene 11 15:36:00 CET 2004


#Hola,
#
#antes que nada, te recomiendo encarecidamente que leas los documentos
introductorios #sobre Tkinter. Te aclarán muchas cosas. El problemas es que
están en inglés y creo que #no hay traducción. Están en:
#http://www.pythonware.com/library/tkinter/an-introduction-to-tkinter.pdf y
#http://www.nmt.edu/tcc/help/pubs/tkinter.pdf
#si hay más debería encontrarlo siempre en:
#http://www.python.org/topics/tkinter/doc.html#
#Saludos, Erny
#....
Lei los apuntes, pero a veces no son lo suficientemente claros para lo que
uno busca,
o si la respuesta esta ahi, falta una palabrita para darme cuenta. Gracias
por tus
modificaciones. Opte por utilizar Grid para acomodar las etiquetas y demas.

 # P: Porque se me "cuelga" la aplicacion y no sale en ...
 # R: a mi no se me cuelga. de todos modos, es mejor terminar bien ...
 #Evento para salir de la ventana principal
 #def bSalir(self):
 #   self.quit()

se me "cuelga" utilizandolo desde el idle paytonwin, desde el IDLE nativo
no.
lo solucione poniendo:
        self.frame.master.destroy()
        self.frame.quit()

AHORA paso a una nueva consulta, el objetivo es ver si la logica que uso
para
llamar a otras pantallas desde una principal y regresar esta bien.
Agradecere
sugerencias:             procedimientos: consulta, mostrar,ocultar
copio todo el codigo fuente por si hay otras sugerencias! ...

********************************************************
"""Aplicacion de Gestion de Clientes basada en:
PythonWin 2.2.3,TKinter,Win32all build 162
por Marcelo Ametller - 2004 v0.0.2 - Cordoba,Argentina.
Consultas y sug: visualnex en tutopia.com  ,version reducida"""
from Tkinter import *
import sys

class FiInicio:
    """Clase para mostrar una ficha de un cliente"""
    def __init__(self, master):
        self.frame = Frame(master,width=300,height=150)
        self.crearInterfaz()

    def crearInterfaz(self):
        frame=self.frame
        frame.master.protocol("WM_DELETE_WINDOW",self.close)
        menubar=Menu(frame)
        menubar.add_command
        climenu = Menu(menubar,tearoff=0)
        climenu.add_command(label="Consulta",command=self.consulta)
        menubar.add_cascade(label="Clientes",menu=climenu)
        frame.master.config(menu=menubar)

        #Muestro ventana principal
        frame.grid()

    def consulta(self):
        self.ocultar()
        #llamo a la aplicacion para mostrar
        #la ficha de cliente
        ini=Tk()
        app = FiCliente(ini)
        ini.mainloop()
        #Mostrar Pantalla inicial
        self.mostrar()

    def ocultar(self):
        self.frame.master.withdraw()

    def mostrar(self):
        self.frame.master.deiconify()

    def close(self):
        self.frame.master.destroy()
        self.frame.quit()

class FiCliente:
    """Clase para mostrar una ficha de un cliente"""
    def __init__(self, master):
        self.frame = Frame(master,width=300,height=150)
        self.crearInterfaz()

    def crearInterfaz(self):
        frame=self.frame
        frame.master.title('FICHA DE CLIENTE')
        frame.master.geometry(rootWinPos)
        frame.master.protocol("WM_DELETE_WINDOW",self.close)
        Label(frame,text="Codigo:").grid(row=0,col=0,sticky=W)
        self.eCodigo=Entry(frame, width=6)
        self.eCodigo.grid(row=0,col=1,sticky=W, padx=3, pady=3)
        self.eCodigo.focus_force()
        Label(frame,text="Apellido:").grid(col=0,sticky=W)
        self.eApellido=Entry(frame,width=30)
        self.eApellido.grid(row=1,col=1,sticky=W, padx=3,pady=3)
        self.fBot=Frame(frame)
        Button( self.fBot, width=6, text = "Buscar",
command=self.bBuscar ).grid(row=0,col=0)
        Button( self.fBot, width=6, text = "Salir",
command=self.close ).grid(row=0,col=2)
        self.fBot.grid(col=1)

        #Muestro ventana principal
        frame.pack(expand=YES, fill=BOTH)

    def bBuscar(self):  #Evento al pulsar Boton grabar
        """Obtiene los datos de un cliente de la clase Clientes"""
        unCli=Clientes()
        Datos=unCli.Ver()
        self.Llenar(Datos)

    def Limpiar(self):
        """Limpia el contenido de los campos de pantalla"""
        self.eCodigo.delete(0,END)
        self.eApellido.delete(0,END)

    def Llenar(self,Datos):
        """LLena los campos de pantalla con sus respectivos valores"""
        self.Limpiar()
        self.eCodigo.insert(END,Datos["Codigo"])
        self.eApellido.insert(END,Datos["Apellido"])

    def close(self):
        self.frame.master.destroy()
        self.frame.quit()

#Declaracion de constantes de la aplicacion
rootWinPos = "+150+150"

class Clientes:
    """Clase para el manejo de clientes"""
    def __init__(self):
        pass

    def Ver(self):
        """Devuelve los datos de un cliente predefinido"""
        Datos = {}
        Datos["Codigo"]="010001"
        Datos["Apellido"]="Gianotti Walter"
        Datos["Calle"]="Av Colon 409"
        Datos["Localidad"]="Cordoba"
        return Datos

class MyApp:
    """Aplicacion Principal Gestion de Clientes"""
    root=Tk()
    app = FiInicio(root)
    root.mainloop()
    sys.exit()

myapp = MyApp()
********************************************************

Gracias y saludos.
Marcelo




Más información sobre la lista de distribución Python-es