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:






Comentarios
Publicar un comentario