def initUI(self): fondo = ttk.Frame(self) if self.img.tipoRuta == Util.RUTA_LOCAL: iconoImg = Image.open(self.img.source) else: try: iconoImg = Image.open( cStringIO.StringIO(urllib.urlopen(self.img.source).read())) except IOError as io: iconoImg = Image.open( cStringIO.StringIO( urllib.urlopen(Util.rutaImg_ImgNoEncontrada).read())) log.error(io) # raise io iconoImg.thumbnail( (int(Util.getMnsjConf("TablaRutas", "altoImgPreVis")), int(Util.getMnsjConf("TablaRutas", "anchoImgPreVis"))), Image.ANTIALIAS) self.iconoPhotoImg = ImageTk.PhotoImage(iconoImg) ttk.Label(fondo, image=self.iconoPhotoImg).pack(expand=tk.TRUE, fill=tk.BOTH) ttk.Button(fondo, text="Aceptar", command=self.close).pack(anchor=tk.NE, pady=10, padx=20) fondo.pack(expand=tk.TRUE, fill=tk.BOTH)
def __init__(self, imgsAfectadas, claseOrigen, claseDestino): self.imgsAfectadas = imgsAfectadas self.claseOrigen = claseOrigen self.claseDestino = claseDestino self.accionRealizada = False if not Valida.exitenciaClase(self.claseOrigen, Accion.dicClases): self.logger.error("Clase " + claseOrigen + " inexistente") raise Exception( Util.getMnsjIdioma('Accion', 'Error_Crear_Clase_Existente')) if not Valida.exitenciaClase(self.claseDestino, Accion.dicClases): self.logger.error("Clase " + claseDestino + " inexistente") raise Exception( Util.getMnsjIdioma('Accion', 'Error_Crear_Clase_Existente')) if not Valida.imagenesExistenteOnClase(self.imgsAfectadas, Accion.dicClases[claseOrigen]): self.logger.error( "Error imagenes incosistentes, no todas se encuentran en la clase origen: " + claseOrigen) raise Exception( Util.getMnsjIdioma('Accion', 'Error_Imagenes_Inconsistentes')) for img in imgsAfectadas: img.nomClaseCorrecto = claseOrigen self.removerImgs = EliminarImagen(imgsAfectadas) self.agregarImgs = AgregarImagen(imgsAfectadas)
def initUI(self): fondo = ttk.Frame(self) if self.img.tipoRuta == Util.RUTA_LOCAL: iconoImg = Image.open(self.img.source) else: try: iconoImg = Image.open(cStringIO.StringIO(urllib.urlopen(self.img.source).read())) except IOError as io: iconoImg = Image.open(cStringIO.StringIO(urllib.urlopen(Util.rutaImg_ImgNoEncontrada).read())) log.error(io) # raise io iconoImg.thumbnail(( int(Util.getMnsjConf("TablaRutas", "altoImgPreVis")), int(Util.getMnsjConf("TablaRutas", "anchoImgPreVis")) ), Image.ANTIALIAS) self.iconoPhotoImg = ImageTk.PhotoImage(iconoImg) ttk.Label(fondo, image = self.iconoPhotoImg).pack(expand = tk.TRUE, fill = tk.BOTH) ttk.Button(fondo, text = "Aceptar", command = self.close).pack(anchor = tk.NE, pady = 10, padx = 20) fondo.pack(expand = tk.TRUE, fill = tk.BOTH)
def crearWidgetImg(self): iconoImg = self.crearIconoImagen() iconoImg.thumbnail( (int(Util.getMnsjConf("TablaRutas", "altoImgMuestra")), int(Util.getMnsjConf("TablaRutas", "anchoImgMuestra"))), Image.ANTIALIAS) self.iconoPhotoImg = ImageTk.PhotoImage(iconoImg) widgetImg = ttk.Label(self.tabla.frmScrollPane.interior, image=self.iconoPhotoImg) return widgetImg
def removerImagen(self, imagen): '''Remueve una imagen de la nomClaseCorrecto en la que se encuentra ''' if imagen.nomClaseCorrecto is None: raise Exception(Util.getMnsjIdioma("Accion", "Error_Remover_None")) try: del self.dicClases[imagen.nomClaseCorrecto][imagen.__hash__()] logger.info("Imagen "+imagen.source+" removida de la clase "+imagen.nomClaseCorrecto) except KeyError: logger.error("Clase "+imagen.nomClaseCorrecto+" inexistente") raise Exception(Util.getMnsjConf('Accion', 'Error_Clase_Inexistente')) except Exception as e: raise e
def efectuarAccion(self, ): logger.info("Eliminando la lcase: "+self.nomClase) ''' Crea una clase y la agrega a la lista de dicClases evitando que se repita ''' if not self.accionRealizada: if not Valida.exitenciaClase(self.nomClase, self.dicClases): logger.error('No se efectuo accion, La clase: '+self.nomClase+' no existe') raise Exception(Util.getMnsjIdioma('Accion', 'Error_Eliminar_Clase_Inex')) del self.dicClases[self.nomClase] self.accionRealizada = True self.actualizarHistorial() logger.info("Clase eliminada :"+self.nomClase+" <ok>") else: raise Exception(Util.getMnsjIdioma("Accion", "Error_Hacer_Accion"))
def removerImagen(self, imagen): '''Remueve una imagen de la nomClaseCorrecto en la que se encuentra ''' if imagen.nomClaseCorrecto is None: raise Exception(Util.getMnsjIdioma("Accion", "Error_Remover_None")) try: del self.dicClases[imagen.nomClaseCorrecto][imagen.__hash__()] logger.info("Imagen " + imagen.source + " removida de la clase " + imagen.nomClaseCorrecto) except KeyError: logger.error("Clase " + imagen.nomClaseCorrecto + " inexistente") raise Exception( Util.getMnsjConf('Accion', 'Error_Clase_Inexistente')) except Exception as e: raise e
def deshacerAccion(self): if self.accionRealizada: for img in self.imgsAfectadas: self.removerImagen(img) self.accionRealizada = False else: raise Exception(Util.getMnsjIdioma("Accion", "Error_Deshacer_Accion"))
def __init__(self, master, frmTabla): ''' Constructor ''' tk.Toplevel.__init__(self, master) self.padre = master self.attributes('-topmost', tk.TRUE) self.frmTabla = frmTabla self.title("Agregar Imagenes") #Opciones para el dialogo de imagenes para abrir una sola imagen de tkinter self.optDialogoImg = opciones = {} opciones['defaultextension'] = '.jpg' opciones['filetypes'] = [('Imagenes', Util.getMnsjConf("Validacion", "Extenciones"))] opciones['initialdir'] = '/home/ivan/' opciones['parent'] = self opciones['title'] = 'Escoge imagenes' #Opciones para el dialogo de imagenes para abrir un archivo con url's de imagenes de tkinter self.optDialogoArchivo = opciones = {} opciones['defaultextension'] = '.jpg' opciones['filetypes'] = [('all files', '.*'), ('text files', '.txt')] opciones['initialdir'] = '/home/ivan/Escritorio/' opciones['parent'] = self opciones['title'] = 'Escoge un imagen archivo de texto que contenga url\'s de imagenes' #Opciones para el dialogo de imagenes para abrir un directorio con imagenes de tkinter self.optDialogoDir = opciones = {} opciones['initialdir'] = '/home/ivan/Escritorio/' opciones['parent'] = self opciones['title'] = 'Escoge un directorio con imagenes' self.initUI() self.hide()
def efectuarAccion(self, ): logger.info("Eliminando la lcase: " + self.nomClase) ''' Crea una clase y la agrega a la lista de dicClases evitando que se repita ''' if not self.accionRealizada: if not Valida.exitenciaClase(self.nomClase, self.dicClases): logger.error('No se efectuo accion, La clase: ' + self.nomClase + ' no existe') raise Exception( Util.getMnsjIdioma('Accion', 'Error_Eliminar_Clase_Inex')) del self.dicClases[self.nomClase] self.accionRealizada = True self.actualizarHistorial() logger.info("Clase eliminada :" + self.nomClase + " <ok>") else: raise Exception(Util.getMnsjIdioma("Accion", "Error_Hacer_Accion"))
def efectuarAccion(self): if not self.accionRealizada: for img in self.imgsAfectadas: self.removerImagen(img) self.accionRealizada = True self.actualizarHistorial() else: raise Exception(Util.getMnsjIdioma("Accion", "Error_Hacer_Accion"))
def deshacerAccion(self): if self.accionRealizada: for img in self.imgsAfectadas: self.removerImagen(img) self.accionRealizada = False else: raise Exception( Util.getMnsjIdioma("Accion", "Error_Deshacer_Accion"))
def deshacerUltimaAccion(self): ''' Deshace la ultima accion realizada eliminandola del historial''' if self.accionRealizada: accion = None if len(self.pilaAcciones)>0 : accion = self.pilaAcciones.pop() accion.deshacerAccion() return accion else: raise Exception(Util.getMnsjIdioma("Accion", "Error_Deshacer_Accion"))
def deshacerAccion(self): if self.accionRealizada: # Se deshace la accion de agregar imagenes de la clase Destino self.deshacerUltimaAccion() # Se vuelven a mover las imagenes for img in self.imgsAfectadas: self.moverImagen(img, self.claseOrigen) # Se deshace la accion de eliminar imagenes de la clase Origen self.deshacerUltimaAccion() else: raise Exception(Util.getMnsjIdioma("Accion", "Error_Deshacer_Accion"))
def buscar(self): ''' Busca utilizando expresiones regulares, todos los objetos Imgen de todos los objetos Fila que se encuentran en la lista filas ''' if self.expRegBusqueda.get() is None : raise Exception(Util.getMnsjIdioma("TablaRutas", "Error_Exp_Reg_None")) self.limpiarLstImgsSeleccionadas() self.limpiarLstImgsFiltradas() try: for img in self.imgs: if(re.search(self.expRegBusqueda.get(),img.source) is not None): self.lstImgsFiltradas.append(img) except Exception: raise Exception(Util.getMnsjIdioma("TablaRutas", "Error_Exp_Reg_Inv")) self.empaquetarWidgetsTabla()
def deshacerUltimaAccion(self): ''' Deshace la ultima accion realizada eliminandola del historial''' if self.accionRealizada: accion = None if len(self.pilaAcciones) > 0: accion = self.pilaAcciones.pop() accion.deshacerAccion() return accion else: raise Exception( Util.getMnsjIdioma("Accion", "Error_Deshacer_Accion"))
def __init__(self, imgsAfectadas, claseOrigen, claseDestino): self.imgsAfectadas = imgsAfectadas self.claseOrigen = claseOrigen self.claseDestino = claseDestino self.accionRealizada = False if not Valida.exitenciaClase(self.claseOrigen, Accion.dicClases): self.logger.error("Clase "+claseOrigen+" inexistente") raise Exception(Util.getMnsjIdioma('Accion', 'Error_Crear_Clase_Existente')) if not Valida.exitenciaClase(self.claseDestino, Accion.dicClases): self.logger.error("Clase "+claseDestino+" inexistente") raise Exception(Util.getMnsjIdioma('Accion', 'Error_Crear_Clase_Existente')) if not Valida.imagenesExistenteOnClase(self.imgsAfectadas, Accion.dicClases[claseOrigen]): self.logger.error("Error imagenes incosistentes, no todas se encuentran en la clase origen: "+claseOrigen) raise Exception(Util.getMnsjIdioma('Accion', 'Error_Imagenes_Inconsistentes')) for img in imgsAfectadas: img.nomClaseCorrecto = claseOrigen self.removerImgs = EliminarImagen(imgsAfectadas) self.agregarImgs = AgregarImagen(imgsAfectadas)
def efectuarAccion(self, ): ''' Crea una clase y la agrega a la lista de dicClases evitando que se repita ''' logger.info("Creando la lcase: "+self.nomClase+"...") if not self.accionRealizada: if not Valida.nomClaseCorrecto(self.nomClase): logger.error('No se efectuo accion, Nombre de la clase invalido: '+self.nomClase) raise Exception(Util.getMnsjIdioma('Accion', 'Error_Crear_Clase_Nom_None')) if Valida.exitenciaClase(self.nomClase, self.dicClases): logger.error('No se efectuo accion, La clase: '+self.nomClase+' ya esta creada') raise Exception(Util.getMnsjIdioma('Accion', 'Error_Crear_Clase_Existente')) nvaClase = {} self.dicClases[self.nomClase] = nvaClase self.accionRealizada = True self.actualizarHistorial() logger.info("Clase creada :"+self.nomClase+" <ok>") else: raise Exception(Util.getMnsjIdioma("Accion", "Error_Hacer_Accion")) print Accion.dicClases
def deshacerAccion(self): if self.accionRealizada: # Se deshace la accion de agregar imagenes de la clase Destino self.deshacerUltimaAccion() # Se vuelven a mover las imagenes for img in self.imgsAfectadas: self.moverImagen(img, self.claseOrigen) # Se deshace la accion de eliminar imagenes de la clase Origen self.deshacerUltimaAccion() else: raise Exception( Util.getMnsjIdioma("Accion", "Error_Deshacer_Accion"))
def deshacerAccion(self): ''' Deshace la accion del propio objeto sin eliminarla del historial, es por eso que esta accion debe de ser llamada desde la funcion deshacerUtilmaAccion(self) ''' logger.info("Deshaciendo accion...") if self.accionRealizada: del self.dicClases[self.nomClase] self.accionRealizada = False logger.info("Deshaciendo accion <ok> Clase "+self.nomClase+" Eliminada") else: raise Exception(Util.getMnsjIdioma("Accion", "Error_Deshacer_Accion"))
def agregarImagen(self, imagen): '''Agrega una imagen al diccionario de la nomClaseCorrecto que trae seteada''' if imagen.nomClaseCorrecto is None : imagen.nomClaseCorrecto = self.nomClaseDefault try: if not Valida.imagenExistenteOnClase(imagen,self.dicClases[imagen.nomClaseCorrecto]): self.dicClases[imagen.nomClaseCorrecto][imagen.__hash__()] = imagen logger.info("Imagen "+imagen.source+" agregada a la clase "+imagen.nomClaseCorrecto) else: logger.info("Imagen "+imagen.source+"no se puede agregar porque ya existe en esta clase "+imagen.nomClaseCorrecto) except KeyError: logger.error("Clase "+imagen.nomClaseCorrecto+" inexistente") raise Exception(Util.getMnsjConf('Accion', 'Error_Clase_Inexistente')) except Exception as e: raise e
def __init__(self, img, tabla): ''' Crea los widgets correspondientes a imagen que estaran contenidos en tabla que se pasa como parametro ''' self.strVarEstaSelecccionado = tk.StringVar() self.chekbImg = ttk.Checkbutton(tabla.frmScrollPane.interior, variable=self.strVarEstaSelecccionado, command=self.checarSeleccion) self.lblRuta = tk.Text(tabla.frmScrollPane.interior, height=int( Util.getMnsjConf("TablaRutas", "altoCeldaRuta"))) self.lblRuta.insert(1.0, img.source) self.lblRuta.config(state=tk.DISABLED) self.widgetPrevisualizacion = None self.tabla = tabla self.img = img
def agregarImagen(self, imagen): '''Agrega una imagen al diccionario de la nomClaseCorrecto que trae seteada''' if imagen.nomClaseCorrecto is None: imagen.nomClaseCorrecto = self.nomClaseDefault try: if not Valida.imagenExistenteOnClase( imagen, self.dicClases[imagen.nomClaseCorrecto]): self.dicClases[imagen.nomClaseCorrecto][ imagen.__hash__()] = imagen logger.info("Imagen " + imagen.source + " agregada a la clase " + imagen.nomClaseCorrecto) else: logger.info( "Imagen " + imagen.source + "no se puede agregar porque ya existe en esta clase " + imagen.nomClaseCorrecto) except KeyError: logger.error("Clase " + imagen.nomClaseCorrecto + " inexistente") raise Exception( Util.getMnsjConf('Accion', 'Error_Clase_Inexistente')) except Exception as e: raise e
def __init__(self, master, frmTabla): ''' Constructor ''' tk.Toplevel.__init__(self, master) self.padre = master self.attributes('-topmost', tk.TRUE) self.frmTabla = frmTabla self.title("Agregar Imagenes") #Opciones para el dialogo de imagenes para abrir una sola imagen de tkinter self.optDialogoImg = opciones = {} opciones['defaultextension'] = '.jpg' opciones['filetypes'] = [('Imagenes', Util.getMnsjConf("Validacion", "Extenciones"))] opciones['initialdir'] = '/home/ivan/' opciones['parent'] = self opciones['title'] = 'Escoge imagenes' #Opciones para el dialogo de imagenes para abrir un archivo con url's de imagenes de tkinter self.optDialogoArchivo = opciones = {} opciones['defaultextension'] = '.jpg' opciones['filetypes'] = [('all files', '.*'), ('text files', '.txt')] opciones['initialdir'] = '/home/ivan/Escritorio/' opciones['parent'] = self opciones[ 'title'] = 'Escoge un imagen archivo de texto que contenga url\'s de imagenes' #Opciones para el dialogo de imagenes para abrir un directorio con imagenes de tkinter self.optDialogoDir = opciones = {} opciones['initialdir'] = '/home/ivan/Escritorio/' opciones['parent'] = self opciones['title'] = 'Escoge un directorio con imagenes' self.initUI() self.hide()
def moverImagen(self, imagen, claseDestino): if imagen is not None: imagen.nomClaseCorrecto = claseDestino else: logger.error("Error la imagen es None no se puede mover") raise Exception(Util.getMnsjIdioma('Accion', 'Error_Imagen_None'))
import os import Utileria.Util as Util import Utileria.Valida as Valida ###################################################################################### logger = Util.getLogger("Accion") ###################################################################################### class Accion(object): nomClaseDefault = 'Clase_Default' claseDefault = {} dicClases = {nomClaseDefault: claseDefault} pilaAcciones = [] #----------------------------------------------------------------------------------------------- def __init__(self, direccionProyecto=None): self.imgsAfectadas = [] self.accionRealizada = True self.dirProyecto = direccionProyecto #----------------------------------------------------------------------------------------------- def efectuarAccion(self): ''' Realiza la accion evitando que se repita ''' return #----------------------------------------------------------------------------------------------- def deshacerAccion(self):
''' Created on 04/10/2015 @author: ivan ''' import ttk import Image import Tkinter as tk from Utileria import Util import cStringIO import urllib import ImageTk log = Util.getLogger("VistaVisualizacionImgs") ######################################################################################## class VistaVisualizacionImgs(tk.Toplevel): ''' Vista para poder visualizar una imagen ''' #---------------------------------------------------------------------- def __init__(self, master, imagen): tk.Toplevel.__init__(self, master) self.padre = master self.img = imagen self.attributes('-topmost', tk.TRUE) self.resizable(0, 0) self.title(imagen.getNomArchivo()) self.initUI() #----------------------------------------------------------------------
''' Created on 18/09/2015 @author: ivan ''' import ttk from Modelo.Accion import Accion from Modelo.MoverImagen import MoverImagen import Tkinter as tk from Utileria import Util ######################################################################################### logger = Util.getLogger("VistaMoverSeleccionados") ######################################################################################### class VistaMoverSeleccionados(tk.Toplevel): ''' Ventana en la que se ofrece la posibilidad mover todas las imagenes que han sido seleccionadas ''' #---------------------------------------------------------------------- def __init__(self, master, claseOrigen, imgsAfectadas): ''' Constructor ''' tk.Toplevel.__init__(self, master) self.padre = master self.attributes('-topmost', tk.TRUE)
''' Created on 18/09/2015 @author: ivan ''' import ttk from Modelo.Accion import Accion from Modelo.MoverImagen import MoverImagen import Tkinter as tk from Utileria import Util ######################################################################################### logger = Util.getLogger("VistaMoverSeleccionados") ######################################################################################### class VistaMoverSeleccionados(tk.Toplevel): ''' Ventana en la que se ofrece la posibilidad mover todas las imagenes que han sido seleccionadas ''' #---------------------------------------------------------------------- def __init__(self, master, claseOrigen, imgsAfectadas): ''' Constructor ''' tk.Toplevel.__init__(self, master) self.padre = master self.attributes('-topmost', tk.TRUE) self.title("Mueve las imagenes")
''' Created on 04/10/2015 @author: ivan ''' import ttk import Image import Tkinter as tk from Utileria import Util import cStringIO import urllib import ImageTk log = Util.getLogger("VistaVisualizacionImgs") ######################################################################################## class VistaVisualizacionImgs(tk.Toplevel): ''' Vista para poder visualizar una imagen ''' #---------------------------------------------------------------------- def __init__(self, master, imagen): tk.Toplevel.__init__(self, master) self.padre = master self.img = imagen self.attributes('-topmost', tk.TRUE) self.resizable(0, 0) self.title(imagen.getNomArchivo())
''' Created on 25/08/2015 @author: ivan ''' from Accion import Accion from AgregarImagen import AgregarImagen from CrearClase import CrearClase from EliminarImagen import EliminarImagen from Utileria.Imagen import Imagen import Utileria.Util as Util import Utileria.Valida as Valida #################################################################################### logger = Util.getLogger("MoverImagen") #################################################################################### class MoverImagen(Accion): ''' Objeto que abstrae los atributos y funcionalidades de la accion mover ''' #---------------------------------------------------------------------------------- def __init__(self, imgsAfectadas, claseOrigen, claseDestino): self.imgsAfectadas = imgsAfectadas self.claseOrigen = claseOrigen self.claseDestino = claseDestino self.accionRealizada = False if not Valida.exitenciaClase(self.claseOrigen, Accion.dicClases):
import re import ttk import Image import ImageTk from Modelo.Accion import Accion from Modelo.AgregarImagen import AgregarImagen import Tkinter as tk from Utileria.Imagen import Imagen from Utileria.ScrolledFrame import ScrolledFrame import Utileria.Util as Util ####################################################################### log = Util.getLogger("TablaRutas") ####################################################################### class TablaRutas (ttk.Frame): ''' Clase que crea una tabla en un Frame con scrolls, especifica para agrear filas con a base de la clase Imagen ''' #----------------------------------------------------------------------- def __init__(self, parent, *args, **kw): ''' Inicializa un frmScrollPane con scroll y crea la cabezera de la tabla ''' ttk.Frame.__init__(self, parent, *args, **kw) self.lstImgsFiltradas = []
@author: ivan ''' import os import tkFileDialog import ttk from Modelo.Accion import Accion from Modelo.AgregarImagen import AgregarImagen import Tkinter as tk from Utileria import Util from Utileria.Imagen import Imagen from Vistas.VistaAgregarImgURLWeb import VistaAgregarImgURLWeb logger = Util.getLogger("VistaMenuAgregarImagenes") ######################################################################################### class VistaMenuAgregarImagenes(tk.Toplevel): ''' Ventana en la que se ofrece la posibilidad de crear una clase ''' #---------------------------------------------------------------------- def __init__(self, master, frmTabla): ''' Constructor ''' tk.Toplevel.__init__(self, master)
''' Created on 26/08/2015 @author: ivan ''' from Accion import Accion import Utileria.Util as Util import Utileria.Valida as Valida logger = Util.getLogger("Accion:CrearClase") class CrearClase(Accion): ''' Clase que abstrae las caracteristicas de la accion crear clase ''' def __init__(self, nomClase): self.nomClase = nomClase self.accionRealizada = False def efectuarAccion(self, ): ''' Crea una clase y la agrega a la lista de dicClases evitando que se repita ''' logger.info("Creando la lcase: "+self.nomClase+"...") if not self.accionRealizada: if not Valida.nomClaseCorrecto(self.nomClase): logger.error('No se efectuo accion, Nombre de la clase invalido: '+self.nomClase) raise Exception(Util.getMnsjIdioma('Accion', 'Error_Crear_Clase_Nom_None')) if Valida.exitenciaClase(self.nomClase, self.dicClases): logger.error('No se efectuo accion, La clase: '+self.nomClase+' ya esta creada')
''' Created on 24/08/2015 @author: ivan ''' from Accion import Accion from CrearClase import CrearClase from Utileria.Imagen import Imagen import Utileria.Util as Util ########################################################################################### logger = Util.getLogger("Agrega") ########################################################################################### class AgregarImagen(Accion): ''' Objeto que abstrae las caracteristicas de una accion de agregar imagenes ''' #------------------------------------------------------------------------------ def __init__(self, imgsAfectadas): self.imgsAfectadas=imgsAfectadas self.accionRealizada = False #------------------------------------------------------------------------------ def efectuarAccion(self): if not self.accionRealizada : for img in self.imgsAfectadas: self.agregarImagen(img) self.accionRealizada = True
def initUI(self): ''' Crea y empaqueta todos low widgets de la ventana ''' self.padre.title("Adquicicion de imagenes") #***************************************************************************************** frmHeader = ttk.Frame(self.padre, relief = tk.RAISED) mbMenu= ttk.Menubutton(frmHeader, text="Archivo") mbMenu.menu = tk.Menu(mbMenu) mbMenu["menu"] = mbMenu.menu mbMenu.menu.add_command(label = "Generar Archivo De Direcciones", command = self.abrirGenerarArchivoDeDirecciones) mbMenu.menu.add_command(label = "Generar Directorio de Imagenes", command = self.abrirVistaGuardarDirectorioImgs) mbMenu.pack(side = tk.LEFT) frmHeader.pack(side = tk.TOP, fill = tk.X, expand = tk.TRUE) #***************************************************************************************** #***************************************************************************************** frmNorte = ttk.Frame(self.padre) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ frmNorteOeste = ttk.Frame(frmNorte) lblLogo = ttk.Label(frmNorteOeste, background = "green", text="Logo") lblLogo.pack(fill = tk.BOTH) frmNorteOeste.grid(column = 0, row = 0) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ frmNorteEste = ttk.Frame(frmNorte) btnAgregarImg = ttk.Button(frmNorteEste, text="Agregar Imagen", width = Util.getMnsjConf("VistaPrincipal", "tamBotones"), command = self.abrirVistaMenuAgrImgs) btnAgregarImg.grid(column = 1, row = 0, pady = 5) btnCrearClase = ttk.Button(frmNorteEste, text="Nueva Clase", width = Util.getMnsjConf("VistaPrincipal", "tamBotones"), command = self.abrirVistaCrearClase) btnCrearClase.grid(column = 1, row = 1, pady = 5) frmNorteEste.grid(column = 1, row = 0) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ frmNorte.grid_columnconfigure(0,weight = 1) frmNorte.grid_columnconfigure(1,weight = 1) frmNorte.pack(fill = tk.X, side=tk.TOP) #***************************************************************************************** ttk.Separator(self.padre, orient = tk.HORIZONTAL).pack() #***************************************************************************************** frmCenter = ttk.Frame(self.padre) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ frmCenterOeste = ttk.Labelframe(frmCenter, text = "Acciones sobre la tabla") ttk.Label(frmCenterOeste, text = "Cambia de clase: ").pack(fill = tk.Y, anchor = tk.NW) self.selectedClase = StringVar() self.selectedClase.set(Accion.nomClaseDefault) self.cmbClases = ttk.Combobox(frmCenterOeste, textvariable=self.selectedClase, state = 'readonly') self.cmbClases['values'] = Accion.dicClases.keys() self.cmbClases.pack(fill = tk.Y, pady = 5) self.cmbClases.bind("<<ComboboxSelected>>", self.cambiarClase) ttk.Button(frmCenterOeste, text = "Mover Todo", width = Util.getMnsjConf("VistaPrincipal", "tamBotones"), command = self.abrirVistaMoverImgs).pack(fill = tk.Y, pady = 5) ttk.Button(frmCenterOeste, text = "Eliminar Todo", width = Util.getMnsjConf("VistaPrincipal", "tamBotones"), command = self.eliminarImagenes).pack(fill = tk.Y, pady = 5) ttk.Separator(frmCenterOeste, orient = tk.HORIZONTAL).pack(fill = tk.Y, expand = tk.TRUE) ttk.Button(frmCenterOeste, text = "Deshacer ultima Accion", width = Util.getMnsjConf("VistaPrincipal", "tamBotones"), command = self.deshacerAccion).pack(fill = tk.Y, pady = 5) frmCenterOeste.pack(fill = tk.BOTH, side = tk.LEFT, expand = tk.TRUE, padx = 5) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ frmCenterEste = ttk.Labelframe(frmCenter, text = "Imagenes de la clase") self.frmTabla = TablaRutas(frmCenterEste) self.frmTabla.pack(fill = tk.BOTH, expand = tk.TRUE) frmCenterEste.pack(fill = tk.BOTH, side = tk.LEFT, expand = tk.TRUE, padx = 5) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ frmCenter.pack(fill = tk.BOTH, side = tk.TOP, expand= tk.TRUE) #***************************************************************************************** #++++++++++++++++++++++++ Ventanas Emergentes ++++++++++++++++++++++++# self.frmVentanaCrearClase = VistaCrearClase(self, self.crearClase) self.frmVentanaMenuAgrImgs = VistaMenuAgregarImagenes(self, self.frmTabla) self.frmVentanaMoverImgs = VistaMoverSeleccionados(self, self.selectedClase, self.frmTabla.lstImgsSeleccionadas) self.frmVentanaGuaDirImgs = VistaGuardarDirectorioImgs(self)
import cStringIO import ttk import urllib import Image import ImageTk import Tkinter as tk from Utileria import Util from Vistas.VistaVisualizacionImgs import VistaVisualizacionImgs ################################################################################################ log = Util.getLogger("Fila") ################################################################################################ class Fila(object): ''' Cada instancia tiene dos objetos widgets que representan columnas en la tabla uno para mostrar la url de la imagen y otro para previsualizar la imagen ''' #------------------------------------------------------------------------------------ def __init__(self, img, tabla): ''' Crea los widgets correspondientes a imagen que estaran contenidos en tabla que se pasa como parametro ''' self.strVarEstaSelecccionado = tk.StringVar()
from Modelo.EliminarClase import EliminarClase from Modelo.EliminarImagen import EliminarImagen from Modelo.MoverImagen import MoverImagen import Tkinter as tk from Utileria import Util from Utileria.TablaRutas import TablaRutas from Vistas.VistaCrearClase import VistaCrearClase from Vistas.VistaGuardarDirectorioImgs import VistaGuardarDirectorioImgs from Vistas.VistaMenuAgregarImagenes import VistaMenuAgregarImagenes from Vistas.VistaMoverSeleccionados import VistaMoverSeleccionados # from PIL import Image # import ImageTk ######################################################################## logger = Util.getLogger("Principal") ######################################################################## class Principal(tk.Frame): ''' Frame que muestra la ventana principal de la aplicacion ''' #------------------------------------------------------------------------------- def __init__(self, master=None, *args, **kw): ''' Constructor de la vista e inicializacion de las propiedades de la ventana ''' tk.Frame.__init__(self, master, *args, **kw) self.padre = master self.padre.geometry('1000x500+10+10')
''' Created on 25/08/2015 @author: ivan ''' from Accion import Accion from AgregarImagen import AgregarImagen from CrearClase import CrearClase from EliminarImagen import EliminarImagen from Utileria.Imagen import Imagen import Utileria.Util as Util import Utileria.Valida as Valida #################################################################################### logger = Util.getLogger("MoverImagen") #################################################################################### class MoverImagen(Accion): ''' Objeto que abstrae los atributos y funcionalidades de la accion mover ''' #---------------------------------------------------------------------------------- def __init__(self, imgsAfectadas, claseOrigen, claseDestino): self.imgsAfectadas = imgsAfectadas self.claseOrigen = claseOrigen self.claseDestino = claseDestino self.accionRealizada = False if not Valida.exitenciaClase(self.claseOrigen, Accion.dicClases): self.logger.error("Clase "+claseOrigen+" inexistente") raise Exception(Util.getMnsjIdioma('Accion', 'Error_Crear_Clase_Existente'))
@author: ivan ''' import os import tkFileDialog import ttk from Modelo.Accion import Accion from Modelo.AgregarImagen import AgregarImagen import Tkinter as tk from Utileria import Util from Utileria.Imagen import Imagen from Vistas.VistaAgregarImgURLWeb import VistaAgregarImgURLWeb logger = Util.getLogger("VistaMenuAgregarImagenes") ######################################################################################### class VistaMenuAgregarImagenes(tk.Toplevel): ''' Ventana en la que se ofrece la posibilidad de crear una clase ''' #---------------------------------------------------------------------- def __init__(self, master, frmTabla): ''' Constructor ''' tk.Toplevel.__init__(self, master) self.padre = master
''' Created on 24/08/2015 @author: ivan ''' from Accion import Accion from CrearClase import CrearClase from Utileria.Imagen import Imagen import Utileria.Util as Util ########################################################################################### logger = Util.getLogger("Agrega") ########################################################################################### class AgregarImagen(Accion): ''' Objeto que abstrae las caracteristicas de una accion de agregar imagenes ''' #------------------------------------------------------------------------------ def __init__(self, imgsAfectadas): self.imgsAfectadas = imgsAfectadas self.accionRealizada = False #------------------------------------------------------------------------------ def efectuarAccion(self): if not self.accionRealizada: for img in self.imgsAfectadas: self.agregarImagen(img)
import os import Utileria.Util as Util import Utileria.Valida as Valida ###################################################################################### logger = Util.getLogger("Accion") ###################################################################################### class Accion(object): nomClaseDefault = 'Clase_Default' claseDefault = {} dicClases = {nomClaseDefault:claseDefault} pilaAcciones = [] #----------------------------------------------------------------------------------------------- def __init__(self, direccionProyecto = None): self.imgsAfectadas=[] self.accionRealizada = True self.dirProyecto = direccionProyecto #----------------------------------------------------------------------------------------------- def efectuarAccion(self): ''' Realiza la accion evitando que se repita ''' return #----------------------------------------------------------------------------------------------- def deshacerAccion(self): '''