Interfaces gráficas V

Ventanas emergentes

Veamos el ejemplo:

from tkinter import *
from tkinter import messagebox

frmRaiz = Tk()

def msgLicencia():
    messagebox.showinfo('Licencia','Licencia de uso del software')

frmRaiz.title='Ejemplo de ventanas emergentes'
frmCuadro = Frame(frmRaiz)
frmCuadro.pack()

mnuMenuPpal = Menu(frmRaiz)
frmRaiz.config(menu=mnuMenuPpal)

mnuArchivo = Menu(mnuMenuPpal,tearoff=0)
mnuArchivo.add_command(label='Cerrar')
mnuArchivo.add_separator()
mnuArchivo.add_command(label='Salir')

mnuAyuda = Menu(mnuMenuPpal,tearoff=0)
mnuAyuda.add_command(label='Ver licencia',command=msgLicencia)
mnuAyuda.add_separator()
mnuAyuda.add_command(label='Acerca de')

mnuMenuPpal.add_cascade(label='Archivo',menu=mnuArchivo)
mnuMenuPpal.add_cascade(label='Ayuda',menu=mnuAyuda)

iLengua=IntVar()
iMatematicas=IntVar()
iBiologia=IntVar()

def opMateria():
    opEscogida='Materias seleccionadas: '
    if iLengua.get()==1:
        opEscogida+=' lenguaje'
    if iMatematicas.get()==1:
        opEscogida+=' matematicas'
    if iBiologia.get()==1:
        opEscogida+=' biologia'

    lblMaterias.config(text=opEscogida)

Label(frmCuadro,text='Seleccione materia a registrar',width=50).pack()

check1=Checkbutton(frmCuadro,text='Lengua',variable=iLengua, onvalue=1,offvalue=0,command=opMateria).pack()
check2=Checkbutton(frmCuadro,text='Matemáticas', variable=iMatematicas, onvalue=1,offvalue=0,command=opMateria).pack()
check3=Checkbutton(frmCuadro,text='Biología', variable=iBiologia, onvalue=1,offvalue=0,command=opMateria).pack()

lblMaterias=Label(frmRaiz)
lblMaterias.pack()

frmRaiz.mainloop()


Resultado:


Como podemos ver se ha generado la ventana emergente al hacer click en el submenú de licencia del menú ayuda.

Otra forma de hacerlo es mostrando la ventana a modo de advertencia, veamos el siguiente ejemplo:

from tkinter import *
from tkinter import messagebox

frmRaiz = Tk()

def msgLicencia():
    messagebox.showinfo('Licencia','Licencia de uso del software')
def msgAvisoLicencia():
    messagebox.showwarning('Licencia','Producto bajo licencia GNU',)

frmRaiz.title='Ejemplo de ventanas emergentes'
frmCuadro = Frame(frmRaiz)
frmCuadro.pack()

mnuMenuPpal = Menu(frmRaiz)
frmRaiz.config(menu=mnuMenuPpal)

mnuArchivo = Menu(mnuMenuPpal,tearoff=0)
mnuArchivo.add_command(label='Cerrar')
mnuArchivo.add_separator()
mnuArchivo.add_command(label='Salir')

mnuAyuda = Menu(mnuMenuPpal,tearoff=0)
mnuAyuda.add_command(label='Ver licencia',command=msgAvisoLicencia)
mnuAyuda.add_separator()
mnuAyuda.add_command(label='Acerca de')

mnuMenuPpal.add_cascade(label='Archivo',menu=mnuArchivo)
mnuMenuPpal.add_cascade(label='Ayuda',menu=mnuAyuda)

iLengua=IntVar()
iMatematicas=IntVar()
iBiologia=IntVar()

def opMateria():
    opEscogida='Materias seleccionadas: '
    if iLengua.get()==1:
        opEscogida+=' lenguaje'
    if iMatematicas.get()==1:
        opEscogida+=' matematicas'
    if iBiologia.get()==1:
        opEscogida+=' biologia'

    lblMaterias.config(text=opEscogida)

Label(frmCuadro,text='Seleccione materia a registrar',width=50).pack()

check1=Checkbutton(frmCuadro,text='Lengua',variable=iLengua, onvalue=1,offvalue=0,command=opMateria).pack()
check2=Checkbutton(frmCuadro,text='Matemáticas', variable=iMatematicas, onvalue=1,offvalue=0,command=opMateria).pack()
check3=Checkbutton(frmCuadro,text='Biología', variable=iBiologia, onvalue=1,offvalue=0,command=opMateria).pack()

lblMaterias=Label(frmRaiz)
lblMaterias.pack()

frmRaiz.mainloop()


Liego también podemos usar las ventanas emergentes para preguntar al usuario cuya respuesta sea si o no. Como por ejemplo si desea salir del sistema como veremos en el siguiente ejemplo:

from tkinter import *
from tkinter import messagebox

frmRaiz = Tk()

def msgLicencia():
    messagebox.showinfo('Licencia','Licencia de uso del software')
def msgAvisoLicencia():
    messagebox.showwarning('Licencia','Producto bajo licencia GNU',)
def msgSalir():
    sRespuesta = messagebox.askquestion('Salir','¿Desea salir del sistema?')
    if sRespuesta =='yes':
        frmRaiz.destroy()

frmRaiz.title='Ejemplo de ventanas emergentes'
frmCuadro = Frame(frmRaiz)
frmCuadro.pack()

mnuMenuPpal = Menu(frmRaiz)
frmRaiz.config(menu=mnuMenuPpal)

mnuArchivo = Menu(mnuMenuPpal,tearoff=0)
mnuArchivo.add_command(label='Cerrar')
mnuArchivo.add_separator()
mnuArchivo.add_command(label='Salir', command=msgSalir)

mnuAyuda = Menu(mnuMenuPpal,tearoff=0)
mnuAyuda.add_command(label='Ver licencia',command=msgAvisoLicencia)
mnuAyuda.add_separator()
mnuAyuda.add_command(label='Acerca de')

mnuMenuPpal.add_cascade(label='Archivo',menu=mnuArchivo)
mnuMenuPpal.add_cascade(label='Ayuda',menu=mnuAyuda)

iLengua=IntVar()
iMatematicas=IntVar()
iBiologia=IntVar()

def opMateria():
    opEscogida='Materias seleccionadas: '
    if iLengua.get()==1:
        opEscogida+=' lenguaje'
    if iMatematicas.get()==1:
        opEscogida+=' matematicas'
    if iBiologia.get()==1:
        opEscogida+=' biologia'

    lblMaterias.config(text=opEscogida)

Label(frmCuadro,text='Seleccione materia a registrar',width=50).pack()

check1=Checkbutton(frmCuadro,text='Lengua',variable=iLengua, onvalue=1,offvalue=0,command=opMateria).pack()
check2=Checkbutton(frmCuadro,text='Matemáticas', variable=iMatematicas, onvalue=1,offvalue=0,command=opMateria).pack()
check3=Checkbutton(frmCuadro,text='Biología', variable=iBiologia, onvalue=1,offvalue=0,command=opMateria).pack()

lblMaterias=Label(frmRaiz)
lblMaterias.pack()

frmRaiz.mainloop()

Resultado:


Es posible también usar la opción ok y cancel ante una pregunta del sistema, siento la respuesta ingresada por el usuario almacenada en una variable booleana, veamos el siguiente ejemplo:

from tkinter import *
from tkinter import messagebox

frmRaiz = Tk()

def msgLicencia():
    messagebox.showinfo('Licencia','Licencia de uso del software')
def msgAvisoLicencia():
    messagebox.showwarning('Licencia','Producto bajo licencia GNU',)
def msgCerrar():
    bRespuesta = messagebox.askokcancel('Cerrar','¿Desea cerrar el sistema?')
    if bRespuesta == True:
        frmRaiz.destroy()
def msgSalir():
    sRespuesta = messagebox.askquestion('Salir','¿Desea salir del sistema?')
    if sRespuesta ==True:
        frmRaiz.destroy()

frmRaiz.title='Ejemplo de ventanas emergentes'
frmCuadro = Frame(frmRaiz)
frmCuadro.pack()

mnuMenuPpal = Menu(frmRaiz)
frmRaiz.config(menu=mnuMenuPpal)

mnuArchivo = Menu(mnuMenuPpal,tearoff=0)
mnuArchivo.add_command(label='Cerrar',command=msgCerrar)
mnuArchivo.add_separator()
mnuArchivo.add_command(label='Salir', command=msgSalir)

mnuAyuda = Menu(mnuMenuPpal,tearoff=0)
mnuAyuda.add_command(label='Ver licencia',command=msgAvisoLicencia)
mnuAyuda.add_separator()
mnuAyuda.add_command(label='Acerca de')

mnuMenuPpal.add_cascade(label='Archivo',menu=mnuArchivo)
mnuMenuPpal.add_cascade(label='Ayuda',menu=mnuAyuda)

iLengua=IntVar()
iMatematicas=IntVar()
iBiologia=IntVar()

def opMateria():
    opEscogida='Materias seleccionadas: '
    if iLengua.get()==1:
        opEscogida+=' lenguaje'
    if iMatematicas.get()==1:
        opEscogida+=' matematicas'
    if iBiologia.get()==1:
        opEscogida+=' biologia'

    lblMaterias.config(text=opEscogida)

Label(frmCuadro,text='Seleccione materia a registrar',width=50).pack()

check1=Checkbutton(frmCuadro,text='Lengua',variable=iLengua, onvalue=1,offvalue=0,command=opMateria).pack()
check2=Checkbutton(frmCuadro,text='Matemáticas', variable=iMatematicas, onvalue=1,offvalue=0,command=opMateria).pack()
check3=Checkbutton(frmCuadro,text='Biología', variable=iBiologia, onvalue=1,offvalue=0,command=opMateria).pack()

lblMaterias=Label(frmRaiz)
lblMaterias.pack()

frmRaiz.mainloop()

Resultado:


Ventanas de apertura de archivos o ventanas de diálogo de archivos

Las ventanas de diálogo de archivos  o por su nombre en inglés file dialog, permiten interactuar con el sistema permitiendo realizar las funciones de abrir un archivo, guardarlo y abrir un directorio. Veamos el siguiente ejemplo:

from tkinter import *
from tkinter import filedialog

venRaiz=Tk()

def abreArchivo():
    archivo=filedialog.askopenfilename(title='Abrir archivo')

venRaiz.title('Manejo de archivos en Python')
venRaiz.geometry('800x600')


Button(venRaiz,text='Abrir archivo',command=abreArchivo).pack()

venRaiz.mainloop()

Resultado:



Como podemos ver se abre la ventana de diálogo de Windows para selección  de archivos, el resultado que se amacena en la variable asignada a esta función es la ruta del archivo seleccionado.

Es posible personalizar aún mas la ventana de diálogo de apertura de archivos, veamos el siguiente ejemplo:

from tkinter import *
from tkinter import filedialog

venRaiz=Tk()

def abreArchivo():
    archivo=filedialog.askopenfilename(title='Abrir archivo',initialdir='C:',filetypes=(('Imagenes JPG','*.jpg'),('Imagenes PNG','*.png'),('Todos los formatos','*.*')))

venRaiz.title('Manejo de archivos en Python')
venRaiz.geometry('800x600')


Button(venRaiz,text='Abrir imagen',command=abreArchivo).pack()

venRaiz.mainloop()


Resultado:


Se ha añadido la posibilidad de filtrar los archivos a través del uso de wildcards.




Comentarios

Entradas populares