def initUI(self): self.padre.title("PREPROCESAMIENTO") #Frames --------------------------------------------------------- frmGRAL = ttk.Frame(self.padre) frmEstado = ttk.Frame(frmGRAL) frmPARAM = ttk.Labelframe(frmGRAL, text = "PARAMETROS") frmRUTAS = ttk.Labelframe(frmEstado, text = "LISTA DE RUTAS") frmCLASES = ttk.Labelframe(frmEstado, text = "LISTA DE CLASES") frmFILTROS = ttk.Labelframe(frmPARAM, text = "FILTROS") frmESCCOL = ttk.Labelframe(frmPARAM, text = "ESCALA y MODO DE COLOR") frmDEST = ttk.Labelframe(frmPARAM, text = "DESTINO") frmW = ttk.Frame(frmESCCOL) frmH = ttk.Frame(frmESCCOL) frmDR = ttk.Frame(frmDEST) frmDCSV = ttk.Frame(frmDEST) # BUTTONS ------------------------------------------------------- button_opt = {'fill': Tkconstants.BOTH, 'padx': 5, 'pady': 5,'side':tk.TOP} ttk.Button(frmPARAM, text='Agregar Nuevo Directorio de Clases', command=self.agregarDirectorioClase).pack(**button_opt) ttk.Button(frmPARAM, text='Agregar Nuevo Archivo de Clases', command=self.agregarArchivoClase).pack(**button_opt) ttk.Button(frmEstado, text='INICIAR PROCESAMIENTO',command=self.RUN_PROCESO).pack(**button_opt) ttk.Button(frmDR, text='Ruta...',command=self.vistaDirectorioDest).pack(side=RIGHT,fill=BOTH) frmGRAL.pack (fill = tk.BOTH, side = tk.TOP, expand= tk.TRUE) frmEstado.pack(fill = tk.BOTH, side = tk.RIGHT, expand = tk.TRUE, padx = 5) frmPARAM.pack (fill = tk.BOTH, side = tk.LEFT, expand = tk.TRUE, padx = 5) frmRUTAS.pack (fill = tk.BOTH, side = tk.TOP, expand = tk.TRUE, padx = 5) frmCLASES.pack(fill = tk.BOTH, side = tk.BOTTOM, expand= tk.TRUE,padx = 5) frmFILTROS.pack(fill = tk.BOTH, side = tk.BOTTOM, expand= tk.TRUE,padx = 5) frmESCCOL.pack(fill = tk.BOTH, side = tk.BOTTOM, expand= tk.TRUE,padx = 5,pady = 10) frmW.pack(fill = tk.X,side=tk.TOP,expand=tk.TRUE,padx=5) frmH.pack(fill = tk.X,side=tk.TOP,expand=tk.TRUE,padx=5) frmDEST.pack(fill = tk.X, side=tk.TOP, expand=tk.TRUE,padx=5) frmDR.pack(fill = tk.X,side=tk.TOP,expand=tk.TRUE,padx=5) frmDCSV.pack(fill = tk.X,side=tk.TOP,expand=tk.TRUE,padx=5) scrollbarx,scrollbary = self.getScrollBars(frmRUTAS) self.listaRutasGUI = tk.Listbox(frmRUTAS,yscrollcommand=scrollbary.set,xscrollcommand=scrollbarx.set) self.confScrollbars(scrollbarx, scrollbary,0) self.packScrollBars(scrollbarx,scrollbary) self.listaRutasGUI.pack(side=LEFT, fill=BOTH, expand=1) scrollbarxC,scrollbaryC = self.getScrollBars(frmCLASES) self.listaClasesGUI = tk.Listbox(frmCLASES,yscrollcommand=scrollbaryC.set,xscrollcommand=scrollbarxC.set) self.confScrollbars(scrollbarxC, scrollbaryC,1) self.packScrollBars(scrollbarxC,scrollbaryC) self.listaClasesGUI.pack(side=LEFT, fill=BOTH, expand=1) self.listaFiltrosGUI = tk.Listbox(frmFILTROS,selectmode=EXTENDED,exportselection=0,yscrollcommand=scrollbaryC.set,xscrollcommand=scrollbarxC.set) self.listaFiltrosGUI.pack(side=LEFT, fill=BOTH, expand=1) self.llenarListaFiltros(self.listaFiltrosGUI) Label(frmW, text="Ancho(W):").pack(side=LEFT) Label(frmH, text="Alto (H): ").pack(side=LEFT) self.strW = StringVar() self.strH = StringVar() self.entryW = tk.Entry(frmW,textvariable=self.strW, justify=tk.CENTER).pack(side=LEFT) self.entryH = tk.Entry(frmH,textvariable=self.strH, justify=tk.CENTER).pack(side=LEFT) Label(frmESCCOL, text="Modo de Color: ").pack(side=LEFT) self.boxVal = StringVar() listaValores = ['1','L','P','RGB'] self.boxMColor = ttk.Combobox(frmESCCOL, textvariable=self.boxVal, values = listaValores, state="readonly").pack(side=LEFT) Label(frmDR,text="Nombre de Nuevo Directorio").pack(side=LEFT) self.strDirDest = StringVar() self.entryNDir = tk.Entry(frmDR,textvariable=self.strDirDest,width=50 ).pack(side=LEFT) Label(frmDCSV,text="Nombre Archivo de etiquetas").pack(side=LEFT) self.strCSV = StringVar() self.entryNCSV = tk.Entry(frmDCSV,textvariable=self.strCSV,width=60).pack(side=LEFT, fill=BOTH) self.frmVentanaGuaDirImgs = VistaGuardarDirectorioImgs(self)
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)
class Principal(tk.Frame): ''' Frame que muestra la ventana principal de la aplicacion ''' #------------------------------------------------------------------------------- def __init__(self, master=None, *args, **kw): tk.Frame.__init__(self, master, *args, **kw) self.padre = master self.padre.geometry('700x600+10+10') #-------------------------------------------- self.width = 0 self.height = 0 self.listaDirectorios = [] self.listaDeClases = [] self.FILTROS = [ImageFilter.BLUR,ImageFilter.CONTOUR,ImageFilter.DETAIL,ImageFilter.EDGE_ENHANCE,ImageFilter.EDGE_ENHANCE_MORE,ImageFilter.EMBOSS,ImageFilter.FIND_EDGES,ImageFilter.SMOOTH,ImageFilter.SMOOTH_MORE,ImageFilter.SHARPEN] self.listaFiltros = [] self.initUI() self.pathDir = '' #------------------------------------------------------------------------------- def initUI(self): self.padre.title("PREPROCESAMIENTO") #Frames --------------------------------------------------------- frmGRAL = ttk.Frame(self.padre) frmEstado = ttk.Frame(frmGRAL) frmPARAM = ttk.Labelframe(frmGRAL, text = "PARAMETROS") frmRUTAS = ttk.Labelframe(frmEstado, text = "LISTA DE RUTAS") frmCLASES = ttk.Labelframe(frmEstado, text = "LISTA DE CLASES") frmFILTROS = ttk.Labelframe(frmPARAM, text = "FILTROS") frmESCCOL = ttk.Labelframe(frmPARAM, text = "ESCALA y MODO DE COLOR") frmDEST = ttk.Labelframe(frmPARAM, text = "DESTINO") frmW = ttk.Frame(frmESCCOL) frmH = ttk.Frame(frmESCCOL) frmDR = ttk.Frame(frmDEST) frmDCSV = ttk.Frame(frmDEST) # BUTTONS ------------------------------------------------------- button_opt = {'fill': Tkconstants.BOTH, 'padx': 5, 'pady': 5,'side':tk.TOP} ttk.Button(frmPARAM, text='Agregar Nuevo Directorio de Clases', command=self.agregarDirectorioClase).pack(**button_opt) ttk.Button(frmPARAM, text='Agregar Nuevo Archivo de Clases', command=self.agregarArchivoClase).pack(**button_opt) ttk.Button(frmEstado, text='INICIAR PROCESAMIENTO',command=self.RUN_PROCESO).pack(**button_opt) ttk.Button(frmDR, text='Ruta...',command=self.vistaDirectorioDest).pack(side=RIGHT,fill=BOTH) frmGRAL.pack (fill = tk.BOTH, side = tk.TOP, expand= tk.TRUE) frmEstado.pack(fill = tk.BOTH, side = tk.RIGHT, expand = tk.TRUE, padx = 5) frmPARAM.pack (fill = tk.BOTH, side = tk.LEFT, expand = tk.TRUE, padx = 5) frmRUTAS.pack (fill = tk.BOTH, side = tk.TOP, expand = tk.TRUE, padx = 5) frmCLASES.pack(fill = tk.BOTH, side = tk.BOTTOM, expand= tk.TRUE,padx = 5) frmFILTROS.pack(fill = tk.BOTH, side = tk.BOTTOM, expand= tk.TRUE,padx = 5) frmESCCOL.pack(fill = tk.BOTH, side = tk.BOTTOM, expand= tk.TRUE,padx = 5,pady = 10) frmW.pack(fill = tk.X,side=tk.TOP,expand=tk.TRUE,padx=5) frmH.pack(fill = tk.X,side=tk.TOP,expand=tk.TRUE,padx=5) frmDEST.pack(fill = tk.X, side=tk.TOP, expand=tk.TRUE,padx=5) frmDR.pack(fill = tk.X,side=tk.TOP,expand=tk.TRUE,padx=5) frmDCSV.pack(fill = tk.X,side=tk.TOP,expand=tk.TRUE,padx=5) scrollbarx,scrollbary = self.getScrollBars(frmRUTAS) self.listaRutasGUI = tk.Listbox(frmRUTAS,yscrollcommand=scrollbary.set,xscrollcommand=scrollbarx.set) self.confScrollbars(scrollbarx, scrollbary,0) self.packScrollBars(scrollbarx,scrollbary) self.listaRutasGUI.pack(side=LEFT, fill=BOTH, expand=1) scrollbarxC,scrollbaryC = self.getScrollBars(frmCLASES) self.listaClasesGUI = tk.Listbox(frmCLASES,yscrollcommand=scrollbaryC.set,xscrollcommand=scrollbarxC.set) self.confScrollbars(scrollbarxC, scrollbaryC,1) self.packScrollBars(scrollbarxC,scrollbaryC) self.listaClasesGUI.pack(side=LEFT, fill=BOTH, expand=1) self.listaFiltrosGUI = tk.Listbox(frmFILTROS,selectmode=EXTENDED,exportselection=0,yscrollcommand=scrollbaryC.set,xscrollcommand=scrollbarxC.set) self.listaFiltrosGUI.pack(side=LEFT, fill=BOTH, expand=1) self.llenarListaFiltros(self.listaFiltrosGUI) Label(frmW, text="Ancho(W):").pack(side=LEFT) Label(frmH, text="Alto (H): ").pack(side=LEFT) self.strW = StringVar() self.strH = StringVar() self.entryW = tk.Entry(frmW,textvariable=self.strW, justify=tk.CENTER).pack(side=LEFT) self.entryH = tk.Entry(frmH,textvariable=self.strH, justify=tk.CENTER).pack(side=LEFT) Label(frmESCCOL, text="Modo de Color: ").pack(side=LEFT) self.boxVal = StringVar() listaValores = ['1','L','P','RGB'] self.boxMColor = ttk.Combobox(frmESCCOL, textvariable=self.boxVal, values = listaValores, state="readonly").pack(side=LEFT) Label(frmDR,text="Nombre de Nuevo Directorio").pack(side=LEFT) self.strDirDest = StringVar() self.entryNDir = tk.Entry(frmDR,textvariable=self.strDirDest,width=50 ).pack(side=LEFT) Label(frmDCSV,text="Nombre Archivo de etiquetas").pack(side=LEFT) self.strCSV = StringVar() self.entryNCSV = tk.Entry(frmDCSV,textvariable=self.strCSV,width=60).pack(side=LEFT, fill=BOTH) self.frmVentanaGuaDirImgs = VistaGuardarDirectorioImgs(self) #------------------------------------------------------------------------------------------------------------------- def RUN_PROCESO(self): tuplaFiltros = self.listaFiltrosGUI.curselection() for seleccion in tuplaFiltros: self.listaFiltros.append(self.FILTROS[seleccion]) if (not self.listaFiltros): self.listaFiltros = None color = self.boxVal.get() destino = self.strDirDest.get() ncsv = self.strCSV.get() w = self.strW.get() h = self.strH.get() directorios = self.listaDirectorios clases = self.listaDeClases filtros = self.listaFiltros print "CSV: ", ncsv print "Ancho: ", w print "Alto: ", h print "Color seleccionado: " , color print "Lista clases", clases print "Filtros: ", filtros proceso = Procesamiento.Procesamiento(directorios,clases,filtros, color ,int(w) , int(h) ,destino+os.path.sep, ncsv) proceso.RUN() def agregarDirectorioClase(self): self.optDialogoDir = opciones = {} opciones['parent'] = self opciones['title'] = 'Elija un directorio de Clase' directorio = tkFileDialog.askdirectory(**self.optDialogoDir) directorio = os.path.abspath(directorio) directorio = directorio + os.path.sep self.cargarInfoDirectorio(directorio) def agregarDirectorioSave(self): self.optDialogoDir = opciones = {} opciones['parent'] = self opciones['title'] = 'Elija un destino de Clase' directorio = tkFileDialog.askdirectory(**self.optDialogoDir) self.strDirDest.set(directorio) #Crear directorio para imágenes procesadas def vistaDirectorioDest(self): self.frmVentanaGuaDirImgs.show() self.update() def agregarArchivoClase(self): self.optDialogoDir = opciones = {} opciones['parent'] = self opciones['title'] = 'Elegir un Archivo de Rutas' archivo = tkFileDialog.askopenfile(**self.optDialogoDir) if(archivo != None and archivo != ''): print archivo.name self.cargarRutasDesdeArchivo(archivo.name) def cargarInfoDirectorio(self, elemento): if(elemento not in self.listaDirectorios and elemento != ''): self.listaDirectorios.append(elemento) self.listaRutasGUI.insert(END, elemento) clase = self.getClaseDesdeRuta(elemento) if(clase): #La clase siempre se inserta en la lista de clases, pero en la lista de la GUI sólo se muestra una vez self.listaClasesGUI.insert(END,clase) def cargarRutasDesdeArchivo(self, archivo): with open(archivo) as archivoClases: rutas = archivoClases.readlines() for ruta in rutas: if(ruta!='' and ruta!='\n'): self.cargarInfoDirectorio(ruta) archivoClases.close() def getClaseDesdeRuta(self,ruta): mostrarEnLista = None separador = os.path.sep clase = ruta.split(separador)[-2] clase = clase.lower() if(clase not in self.listaDeClases): #para saber si se mostrará en la lista de la GUI mostrarEnLista = clase self.listaDeClases.append(clase) # La clase Simepre se agrega a la lista @self.listaDeClases return mostrarEnLista def llenarListaFiltros(self,listaGUI): for filtro in self.FILTROS: self.listaFiltrosGUI.insert(END,filtro.name) def getScrollBars(self,frameToStroll): scrollbary = Scrollbar(frameToStroll, orient=VERTICAL) scrollbarx = Scrollbar(frameToStroll, orient=HORIZONTAL) return scrollbarx,scrollbary def confScrollbars(self,sbx,sby,listaActiva): if(listaActiva == 0): sbx.config(command=self.xview) sby.config(command=self.yview) else: sbx.config(command=self.xview2) sby.config(command=self.yview2) def packScrollBars(self,sbx,sby): sbx.pack(fill=X) sby.pack(side=RIGHT, fill=Y) def yview(self,*args): apply(self.listaRutasGUI.yview, args) def yview2(self,*args): apply(self.listaClasesGUI.yview, args) def xview(self,*args): apply(self.listaRutasGUI.xview, args) def xview2(self,*args): apply(self.listaClasesGUI.xview, args)
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') self.initUI() #------------------------------------------------------------------------------- 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) #------------------------------------------------------------------------------- def crearClase(self): ''' Metodo que crea una clase y refresca el combobox que contiene las clases de la vista ''' try: CrearClase(self.frmVentanaCrearClase.strVarNomNvaClase.get()).efectuarAccion() self.frmVentanaCrearClase.strVarNomNvaClase.set("") self.frmVentanaCrearClase.hide() self.actualizarCmbClases() except Exception as ex: logger.error(ex) #------------------------------------------------------------------------------- def abrirVistaCrearClase(self): self.frmVentanaCrearClase.show() #------------------------------------------------------------------------------- def abrirVistaMenuAgrImgs(self): self.frmVentanaMenuAgrImgs.show() #------------------------------------------------------------------------------- def abrirVistaMoverImgs(self): self.frmVentanaMoverImgs.show() #------------------------------------------------------------------------------- def abrirVistaGuardarDirectorioImgs(self): self.frmVentanaGuaDirImgs.show() #------------------------------------------------------------------------------- def abrirGenerarArchivoDeDirecciones(self): f = tkFileDialog.asksaveasfilename(defaultextension=".txt") Accion().generarArchivoDeDirecciones(f) #------------------------------------------------------------------------------- def cambiarClase(self, event): logger.info("Cambiando de clase a : "+self.selectedClase.get()) if self.selectedClase.get() is not None and self.selectedClase.get() != "": self.actualizarClase(self.selectedClase.get()) #------------------------------------------------------------------------------- def actualizarCmbClases(self): self.cmbClases['values'] = Accion.dicClases.keys() #------------------------------------------------------------------------------- def actualizarClase(self, nomClase): self.frmTabla.cambiarDeClase(nomClase) self.frmTabla.actualizarTabla() self.selectedClase.set(nomClase) #------------------------------------------------------------------------------- def eliminarImagenes(self): lstAuxImgs = [] lstAuxImgs.extend(self.frmTabla.lstImgsSeleccionadas) accion = EliminarImagen(lstAuxImgs) accion.efectuarAccion() self.actualizarClase(self.selectedClase.get()) #------------------------------------------------------------------------------- def deshacerAccion(self): accionDeshecha = Accion().deshacerUltimaAccion() if accionDeshecha is None: logger.info("No hay mas acciones por deshacer") elif accionDeshecha.__class__ == AgregarImagen: self.actualizarClase(Accion.nomClaseDefault) elif accionDeshecha.__class__ == EliminarImagen: self.actualizarClase(accionDeshecha.imgsAfectadas[0].nomClaseCorrecto) elif accionDeshecha.__class__ == CrearClase or accionDeshecha.__class__ == EliminarClase: self.actualizarCmbClases() elif accionDeshecha.__class__ == MoverImagen: self.actualizarClase(accionDeshecha.claseOrigen) else: logger.error("Error no se encontro el tipo de accion que se desizo")