def init_ctrls(self, campos, padre=None): """ Pinta los campos indicados dentro de la ventana. Formato "campos": #- INSERTAR PANELES: ['PANEL',nombre, xini, yini, tamanox, tamanoy,color, CAMPOS_HIJOS] #- INSERTAR ENTRADAS: ['ENTRY', alto_control, salto_a_-1, style_etiq, style_txt, LS_ENT] LS_ENT = [Nombre,etiq,xini,yini,formato,max,ancho,edi, fcal,sobre,ade,dlsel,tip,cpan,style] """ #ultx,ulty = 0,0 # Ultimas posiciones X e Y de un campo #sumax,sumay = 0,0 # Distancia a sumar para poner la proxima entrada si -1 if padre==None: padre= self self._ctord = [] for lnc in campos: tipo = lnc[0] #- INSERTAR PANELES # ['PANEL',nombre, xini, yini, tamanox, tamanoy,color,lista_hijos] if tipo=='PANEL': self.__Pon_Panel(padre, lnc) #- INSERTAR CAMPOS DE TEXTO # ['ENTRY', alto_control, salto_a_-1, style_etiq, style_txt, LS_ENT] # LS_ENT = [Nombre,etiq,xini,yini,formato,max,ancho,edi, # fcal,sobre,ade,dlsel,tip,cpan,style] elif tipo=='ENTRYS': self.__Pon_Entradas(padre,lnc) #- INSERTAR LISTAS # ['LIST',nombre, xini, yini, tamanox, tamanoy, cols, # acc_click, acc_dclick] elif tipo=='LIST': self.__Pon_Lista(padre,lnc) #- INSERTAR GRIDS elif tipo=='GRID': self.__Pon_Grid(padre, lnc) #- INSERTAR BOTONES elif tipo=='BUTTONS': self.__Pon_Botones(padre, lnc) #- INSERTAR CHECKBUTTON elif tipo=='CHECK': self.__Pon_Checks(padre,lnc) else: debug("Tipo " + str(tipo) + " no definido.") self.Refresh()
def __Pon_Panel(self,padre,datos): """ Pinta en la Ventana el Panel indicado #- datos = datos_panel: ['PANEL',Id, xini, yini, tamanox, tamanoy, style, borde, Titulo(Si Pestaña)/AccionCambio(Si tabbox), CAMPOS_HIJOS] """ tipo = datos[0] if tipo!='PANEL' and tipo!='TABBOX': return -1 nombre = datos[1] xini,yini = int(datos[2]), int(datos[3]) tamx,tamy = int(datos[4]), int(datos[5]) estilo = datos[6] #borde = datos[7] #acciontb = datos[8] hijos = datos[-1] posic = wx.Point(xini,yini) if tamx==-1: tamx = padre.GetSize()[0] if tamy==-1: tamy = padre.GetSize()[1] if padre==self: tamy = tamy - 30 # Quitamos el tamaño del titulo tam = wx.Size(tamx, tamy) #- elem = wx.Panel(name=nombre, parent=padre, pos=posic, size=tam, style=wx.TAB_TRAVERSAL) #- # Si hay color de fondo, lo ponemos if estilo!='': stl = estilo.split('/') for ln in stl: if ln[:2]=='B-': rgb = ln[2:].split(':') elem.SetBackgroundColour(wx.Colour(int(rgb[0]), int(rgb[1]), int(rgb[2]))) else: pass # Tener en cuenta otros tipos de estilo ??? #- Ponemos en el diccionario de campos if not nombre in self._ct: self._ct[nombre]=elem else: debug('El control '+nombre+' se encuentra repetido.') # if hijos!=[]: self.init_ctrls(hijos,elem)
def __Pon_NoteBook(self, padre, datos): """ Pinta en la Ventana un Panel para poner Pestaña (Tabbox) ['TABBOX',Id, xini, yini, tamanox,tamanoy, style, borde Titulo(Si pestaña)/Accion al cambio(Si Tabbox), CAMPOS_HIJOS] """ tipo = datos[0] if tipo != 'TABBOX': return -1 nombre = datos[1] xini, yini = int(datos[2]), int(datos[3]) tamx, tamy = int(datos[4]), int(datos[5]) #estilo = datos[6] #borde = datos[7] #acciontb = datos[8] hijos = datos[-1] posic = wx.Point(xini, yini) if tamx == -1: tamx = padre.GetSize()[0] if tamy == -1: tamy = padre.GetSize()[1] - self._statusbar.GetSize()[1] if padre == self: tamy = tamy - 30 # Quitamos el tamaño del titulo tam = wx.Size(tamx, tamy) # elem = wx.Notebook(name=nombre, parent=padre, pos=posic, size=tam) # if hijos != []: for hijo in hijos: p = self.__Pon_Panel(elem, hijo) elem.AddPage(p, hijo[8]) #- Ponemos en el diccionario de campos if not nombre in self._ct: self._ct[nombre] = elem else: debug('El control ' + nombre + ' se encuentra repetido.') return elem
tab=-1 if actual._name in lsct: tab = lsct.index(actual._name) if tab>0: # Si tipo==Entry: SetFocus, Si tipo==Grid: SetCellCursor self._ct[lsct[tab-1]].SetFocus() ############################################################# # # # # ############################################################## if __name__ == "__main__": debug('main')### ls_campos=[] # p1 = ['PANEL','P1',0,0,-1,-1,'B-236:44:26/RF','','',[]] hijosp1=[] hijosp1.append(['E1','Código',10,15,6,'%',7,'','','','','ar_ls','codigo del cliente','clientes','']) hijosp1.append(['E2','Nombre',-1,15,6,'l',10,'','','','','','','','']) p1[-1].append(['ENTRYS','EX',22,50,'F-255:255:0','B-0:0:0/F-255:255:255',hijosp1]) # PANELES: ['PANEL',nombre, xini, yini, tamanox, tamanoy,color,lista_hijos] ls_campos.append(p1) app = wx.App(False) ventana = Dialogo(None) ventana.init_ctrls(ls_campos)
if self.ShowModal() == wx.ID_OK: res = self._ct['LS'].GetValue() else: res = None self.Close() self.Destroy() return res ############################################# # # ############################################# if __name__ == "__main__": app = wx.App(False) #frame = wx.Frame(None,title="Prueba de la Clase Grid") #frame.SetSize((800,600)) #frame.CentreOnScreen() fichero = 'clientes' preguntas = [] preguntas.append(['Nombre del Cliente', '=', '', 'CL_DENO']) preguntas.append(['Poblacion', '=', '', 'CL_POB']) dl = dl_select(None, fichero, preguntas) res = dl.res() debug('res Main', res) app.MainLoop()
def Ejecuta_Accion(self, accion, argumentos=''): if accion == 'a_salir': if self.Modifica == 1: dlg = Men( 'Hay cambios en la ventana y no ha guardado.\n¿Desea Continuar?', 'sn', img='q') if dlg == 'n': return self.Modifica = 0 self.Close() self.Destroy() # elif accion == 'a_carga_wins': if self.Modifica == 1: dlg = Men( 'Hay cambios en la ventana y no ha guardado.\n¿Desea Continuar?', 'sn', img='q') if dlg == 'n': return self.Modifica = 0 """ Leer la lista de ventanas actuales """ lis = [] wins = db.btopen(self.fileName) for nm in wins.keys(): datos = pickle.loads(wins[nm]) lis.append([nm, datos[0]]) # Ventana, Descripcion wins.close() # self._ct['G1'].SetValue([]) self.arbol.DeleteAllItems() self._ct['L1'].SetValue(lis) # elif accion == 'a_sele_win': # if self.Modifica == 1: dlg = Men( 'Hay cambios en la ventana y no ha guardado.\n¿Desea Continuar?', 'sn', img='q') if dlg == 'n': return self.Modifica = 0 # sele = self._ct['L1'].GetValue() if sele == None: Men('No hay seleccionada ventana') return -1 # wins = db.btopen(self.fileName) datos = pickle.loads(wins[sele]) wins.close() # self.Datos_a_Arbol(datos) # self.wsele = sele self.titu.SetLabel(sele.upper()) self.arbol.SelectItem(self.arbol.RootItem) elif accion == 'a_nuevo': if self.Modifica == 1: dlg = Men( 'Hay cambios en la ventana y no ha guardado.\n¿Desea Continuar?', 'sn', img='q') if dlg == 'n': return self.Modifica = 0 # nombre = Entra_dlg(self, '', 'Nombre de la ventana nueva:') if nombre == -1: return propgen = [] # Propiedades Generales de la ventana propgen.append('Ventana ' + nombre) # Descripción propgen.append('') # Nombre Ventana Padre propgen.append('') # Icono Ventana propgen.append('') # Titulo de la ventana propgen.append('800') # Tamaño X propgen.append('600') # Tamaño Y propgen.append('c') # Pos X inicial (c=Centro) propgen.append('c') # Pos Y inicial (c=Centro) propgen.append('') # Nombre de la tabla Asociada propgen.append('') # Campo que contiene Clave Tabla propgen.append('') # Acción Cargar Ventana propgen.append('') # Acción Despues de Leer propgen.append('') # Boton a Ejecutar con FIN data = {} data[self.NOMBRE_ROOT] = propgen self.arbol.AddRoot(self.NOMBRE_ROOT) # dicc = db.btopen(self.fileName) datoswin = copy.deepcopy(propgen) datoswin.append([]) # Ningun elemento Hijo al empezar dicc[nombre] = pickle.dumps(datoswin) dicc.close() # self.Ejecuta_Accion('a_carga_wins') self._ct['L1'].Sel_Item(nombre) elif accion == 'a_borra': """ Borrar una tabla """ sele = self._ct['L1'].GetValue() if sele == None: Men('Debe seleccionar la ventana a borrar') return -1 dlg = Men('¿Está seguro de borrar la ventana ' + sele + '?', 'sn', img='q') if dlg == 'n': return -1 dicc = db.btopen(self.fileName) del dicc[sele] dicc.close() Men('Ventana Borrada') self.Ejecuta_Accion('a_carga_wins') elif accion == 'a_graba_cambio': arbol = self.arbol data = self.data grid = self._ct['G1'] fila = grid.GetNRow() - 1 nodo = arbol.GetSelection() if nodo.IsOk(): idnodo = arbol.GetItemText(nodo) self.data[idnodo][fila] = grid.GetValue(fila, 1) self.Modifica = 1 elif accion == 'a_graba': """ Grabar los datos de la ventana actual """ win = self._ct['L1'].GetValue() if win == None: Men('No hay seleccionada ventana') return -1 datos = self.Arbol_a_Datos() # dicc = db.btopen(self.fileName) dicc[win] = pickle.dumps(datos) dicc.close() # self.Modifica = 0 Men('Ventana Guardada', img='i') #self.Ejecuta_Accion('a_carga_wins') elif accion == 'a_ejecuta': sele = self._ct['L1'].GetValue() if sele == None: Men('Debe seleccionar la ventana a ejecutar') return -1 wins = db.btopen(self.fileName) datos = pickle.loads(wins[sele]) wins.close() codigo = "#!/usr/bin/env python " + "\n" codigo += "# -*- coding: iso-8859-1 -*-" + "\n" codigo += "import wx" + "\n" codigo += "import OC" + "\n" codigo += "# from OC.ui.Funciones import *" + "\n" codigo += "class " + sele + "(OC.ui.Ventana):" + "\n" codigo += " def __init__(self):" + "\n" codigo += " OC.ui.Ventana.__init__(self, None,'" + datos[ 3] + "',tam=(" + datos[4] + "," + datos[5] + "))" + "\n" ## codigo += " ls_campos = " + str(datos[-1]) + "\n" # codigo += " self.init_ctrls(ls_campos)" + "\n" codigo += "win = " + sele + "()" debug(codigo) exec(codigo) return 0 elif accion == 'a_detalle_entradas': import dl_entrys dlg = dl_entrys.Detalle_Entrys(self) #dlg.ShowModal() print dlg.GetValue() dlg.Destroy() return 0 else: return -999