--------- Mensaje reenviado -------- De: Mario Lacunza <[EMAIL PROTECTED]> Para: Lista Python Ing <python-list@python.org> Asunto: Problems with PyGridTableBase Fecha: Sat, 09 Sep 2006 00:03:20 -0500
Hello, I attach two files:frmClientes and frmClientesNE. frmClientes charge a Grid with resume Costumers data: Name, Commercial ID, address, etc. and edition options. frmClientes in Line 178 def OnBtnNuevoButton(self, event): call to frmClientesNE. Its append a new record to the database and clear all controls and when I close it, the grid in frmClientes: grClte must be recharge with the new data, but that dont work. Only work when a Delete some record. I couldnt send yours a runable .py version, because both of them files pickup data from a Firebird's database. I try to implement the wxPython Demo model: Grid_MegaExample, follow that my class Grilla must be: Line 224: class Grilla(Grid.Grid): but for the Boa Constructors controls creation I couldnt inherit from Grid.Grid, thats my problem, I need your help I try for two days and nothing :-( ... some ideas?? Thanks in advance!! ====================================================================== FILE: FRMCLIENTES.PY ====================================================================== # -*- coding: utf8 -*-# #Boa:Frame:frmClientes __version__='0.5' __autor__='Mario Lacunza Vasquez <[EMAIL PROTECTED]>' import wx import wx.grid import modGlobals from Conectar import Conectar import errores def create(parent): return frmClientes(parent) [wxID_FRMCLIENTES, wxID_FRMCLIENTESBRNSALIR, wxID_FRMCLIENTESBTNBORRAR, wxID_FRMCLIENTESBTNEDIT, wxID_FRMCLIENTESBTNNUEVO, wxID_FRMCLIENTESGRCLTE, wxID_FRMCLIENTESLBLTITULO, wxID_FRMCLIENTESPANEL1, ] = [wx.NewId() for _init_ctrls in range(8)] class frmClientes(wx.Frame): def _init_coll_fsGrid_Growables(self, parent): # generated method, don't edit parent.AddGrowableRow(0) def _init_coll_fsGrid_Items(self, parent): # generated method, don't edit parent.AddWindow(self.grClte, 0, border=2, flag=wx.EXPAND | wx.ALL) def _init_coll_fsBtn_Items(self, parent): # generated method, don't edit parent.AddWindow(self.btnNuevo, 0, border=2, flag=wx.EXPAND | wx.ALL) parent.AddWindow(self.btnEdit, 0, border=2, flag=wx.EXPAND | wx.ALL) parent.AddWindow(self.btnBorrar, 0, border=2, flag=wx.EXPAND | wx.ALL) parent.AddWindow(self.brnSalir, 0, border=2, flag=wx.EXPAND | wx.ALL) def _init_coll_fsTit_Items(self, parent): # generated method, don't edit parent.AddWindow(self.lblTitulo, 0, border=6, flag=wx.EXPAND) def _init_coll_bsClte_Items(self, parent): # generated method, don't edit parent.AddWindow(self.panel1, 1, border=0, flag=wx.EXPAND) def _init_coll_fsTit_Growables(self, parent): # generated method, don't edit parent.AddGrowableRow(0) def _init_coll_fsClte_Growables(self, parent): # generated method, don't edit parent.AddGrowableRow(0) parent.AddGrowableRow(1) parent.AddGrowableRow(2) parent.AddGrowableCol(0) def _init_coll_fsClte_Items(self, parent): # generated method, don't edit parent.AddSizer(self.fsTit, 1, border=5, flag=wx.ALIGN_CENTER_HORIZONTAL) parent.AddSizer(self.fsGrid, 1, border=10, flag=wx.ALIGN_CENTER_HORIZONTAL) parent.AddSizer(self.fsBtn, 1, border=5, flag=wx.ALIGN_CENTER_HORIZONTAL) def _init_sizers(self): # generated method, don't edit self.bsClte = wx.BoxSizer(orient=wx.VERTICAL) self.fsClte = wx.FlexGridSizer(cols=1, hgap=0, rows=0, vgap=0) self.fsTit = wx.FlexGridSizer(cols=1, hgap=0, rows=0, vgap=0) self.fsGrid = wx.FlexGridSizer(cols=1, hgap=5, rows=0, vgap=5) self.fsBtn = wx.FlexGridSizer(cols=4, hgap=0, rows=0, vgap=0) self._init_coll_bsClte_Items(self.bsClte) self._init_coll_fsClte_Growables(self.fsClte) self._init_coll_fsClte_Items(self.fsClte) self._init_coll_fsTit_Growables(self.fsTit) self._init_coll_fsTit_Items(self.fsTit) self._init_coll_fsGrid_Growables(self.fsGrid) self._init_coll_fsGrid_Items(self.fsGrid) self._init_coll_fsBtn_Items(self.fsBtn) self.SetSizer(self.bsClte) self.panel1.SetSizer(self.fsClte) def _init_ctrls(self, prnt): # generated method, don't edit wx.Frame.__init__(self, id=wxID_FRMCLIENTES, name=u'frmClientes', parent=prnt, pos=wx.Point(352, 148), size=wx.Size(589, 514), style=wx.DEFAULT_FRAME_STYLE, title=u'Clientes') self.SetClientSize(wx.Size(589, 514)) self.panel1 = wx.Panel(id=wxID_FRMCLIENTESPANEL1, name='panel1', parent=self, pos=wx.Point(0, 0), size=wx.Size(589, 514), style=wx.TAB_TRAVERSAL) self.lblTitulo = wx.StaticText(id=wxID_FRMCLIENTESLBLTITULO, label=u'', name=u'lblTitulo', parent=self.panel1, pos=wx.Point(258, 0), size=wx.Size(72, 19), style=0) self.lblTitulo.Center(wx.HORIZONTAL) self.lblTitulo.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD, False, u'Sans')) self.grClte = wx.grid.Grid(id=wxID_FRMCLIENTESGRCLTE, name=u'grClte', parent=self.panel1, pos=wx.Point(10, 63), size=wx.Size(568, 326), style=0) self.grClte.EnableEditing(False) self.grClte.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnGrClteGridSelectCell) self.btnNuevo = wx.Button(id=wxID_FRMCLIENTESBTNNUEVO, label=u'Nuevo', name=u'btnNuevo', parent=self.panel1, pos=wx.Point(118, 435), size=wx.Size(85, 34), style=0) self.btnNuevo.SetToolTipString(u'Nuevo Cliente') self.btnNuevo.Bind(wx.EVT_BUTTON, self.OnBtnNuevoButton, id=wxID_FRMCLIENTESBTNNUEVO) self.btnEdit = wx.Button(id=wxID_FRMCLIENTESBTNEDIT, label=u'Editar', name=u'btnEdit', parent=self.panel1, pos=wx.Point(207, 435), size=wx.Size(85, 34), style=0) self.btnEdit.SetToolTipString(u'Editar Cliente') self.btnEdit.Bind(wx.EVT_BUTTON, self.OnBtnEditButton, id=wxID_FRMCLIENTESBTNEDIT) self.btnBorrar = wx.Button(id=wxID_FRMCLIENTESBTNBORRAR, label=u'Eliminar', name=u'btnBorrar', parent=self.panel1, pos=wx.Point(296, 435), size=wx.Size(85, 34), style=0) self.btnBorrar.SetToolTipString(u'Eliminar Cliente') self.btnBorrar.Bind(wx.EVT_BUTTON, self.OnBtnBorrarButton, id=wxID_FRMCLIENTESBTNBORRAR) self.brnSalir = wx.Button(id=wxID_FRMCLIENTESBRNSALIR, label=u'Salir', name=u'brnSalir', parent=self.panel1, pos=wx.Point(385, 435), size=wx.Size(85, 34), style=0) self.brnSalir.SetToolTipString(u'Salir') self.brnSalir.Bind(wx.EVT_BUTTON, self.OnBrnSalirButton, id=wxID_FRMCLIENTESBRNSALIR) self._init_sizers() def __init__(self, parent): self._init_ctrls(parent) self.CrearGrid() #------------------------------------------------------------------------------- def CrearGrid(self): #Setea la Tabla para el Grid self.table = Tabla() self.grClte.SetTable(self.table, True) #Setea el ancho de las columnas del Grid self.grClte.SetColSize(0,50) self.grClte.SetColSize(2,150) self.grClte.SetColSize(4,250) #------------------------------------------------------------------------------- def OnBtnNuevoButton(self, event): #Nuevo import frmClientesNE x=frmClientesNE.create(None,"N") x.Show() def OnBtnEditButton(self, event): #Editar import frmClientesNE x=frmClientesNE.create(None,"E",self.Valor) x.Show() def OnBtnBorrarButton(self, event): self.oD=D_Cltes() dlg=wx.MessageDialog(self,u'¿Está seguro de eliminar este Cliente?', \ 'PymeGestor',wx.YES_NO | wx.ICON_QUESTION) rpta=dlg.ShowModal() if (rpta==wx.ID_YES): self.oD.Borrar(self.Valor) dlg2=wx.MessageDialog(self,u'El Cliente fue el eliminado con éxito.', \ 'PymeGestor',wx.OK | wx.ICON_INFORMATION) dlg2.ShowModal() dlg2.Destroy() else: pass dlg.Destroy() def OnBrnSalirButton(self, event): self.Close(True) def OnGrClteGridSelectCell(self, event): #Obtiene el valor de la celda seleccionada. self.R=event.GetRow() #Fija como 0 la celda q contiene el campo ID. self.C = 0 self.Valor=self.table.GetValue(self.R,self.C) event.Skip() #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- class Tabla(wx.grid.PyGridTableBase): """Clase que maneja la grilla de Datos.""" def __init__(self): wx.grid.PyGridTableBase.__init__(self) self.oCltes=D_Cltes() self.data=self.oCltes.CargarClientes() #Setea el Numero de Columnas a mostrar por el SQL self.Columnas=7 #Setea los titulos del Grid self.colLabels = ["ID", "CODIGO", "CLIENTE", "NRO.DOC.", "DIRECCION", "TELEFONO","EMAIL"] def GetNumberRows(self): r=len(self.data) return r def GetNumberCols(self): return self.Columnas def IsEmptyCell(self, row, col): return False def GetValue(self, row, col): #Muestra los datos devueltos por el Recordset value=self.data[row][col] if value is not None: return value else: return '' def SetValue(self, row, col, value): try: self.data[row][col] = value except IndexError: # add a new row self.data.append([''] * self.GetNumberCols()) self.SetValue(row, col, value) # tell the grid we've added a row msg = wxGridTableMessage(self, # The table wxGRIDTABLE_NOTIFY_ROWS_APPENDED, # what we did to it 1 # how many ) self.GetView().ProcessTableMessage(msg) def GetColLabelValue(self, col): return self.colLabels[col] #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- class O_Cltes: """Clase de Negocios para el manejo de los Clientes.""" def __init__(self): """ Constructor.""" #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- class D_Cltes: """Maneja las operaciones con clientes.""" mCodigo=None mNombre=None mTipoDoc=None mNumDoc=None mDireccion=None mPostal=None mFono1=None mFono2=None mFax=None mEmail=None mCelular=None mWeb=None mLinCredito=None def __init__(self): """ Constructor.""" #Instancia la Clase self.cnn=Conectar() #Obtiene cadena de Conexion self.cnn.__class__.cnn=modGlobals.CNN #------------------------------------------------------------------------------- def CargarClientes(self): """Genera lista de Clientes.""" sql="Select ID, Codigo, Nombre, NumDoc, Direccion, Fono1, Email from tblClientes" self.cnn.__class__.SQL=sql try: rs=self.cnn.EjecutarSQL() return rs except errores.ConexionError, err: print "Error:",err.mensaje except errores.ConexionEjecucionError, err: print "Error:",err.msgEjec #------------------------------------------------------------------------------- def Borrar(self, mCod): """Borra Cliente de la Bd.""" sql="Delete from tblClientes Where ID=%d"%(mCod) self.cnn.__class__.SQL=sql try: rs=self.cnn.EjecutarSQL('Delete') return True except errores.ConexionError, err: print "Error:",err.mensaje except errores.ConexionEjecucionError, err: print "Error:",err.msgEjec #------------------------------------------------------------------------------- def CargaTDoc(self): sql="Select ID, Detalle from tblTipoDoc" self.cnn.__class__.SQL=sql try: rs=self.cnn.EjecutarSQL() return rs except errores.ConexionError, err: print "Error:",err.mensaje except errores.ConexionEjecucionError, err: print "Error:",err.msgEjec #------------------------------------------------------------------------------- def Graba(self): """Graba los datos.""" #Obtiene el codigo self.__class__.mCodigo=self.GeneraCod() sql="Insert into tblClientes(ID, CODIGO, NOMBRE, TIPODOC, NUMDOC, DIRECCION, POSTAL,\ FONO1,FONO2,FAX, EMAIL, CELULAR, WEB, LINCREDITO)\ VALUES(GEN_ID(GEN_TBLCLIENTES_ID,1),\ '%s', '%s', %d, '%s', '%s','%s','%s','%s','%s','%s','%s','%s',% d)"\ %(self.__class__.mCodigo, self.__class__.mNombre, self.__class__.mTipoDoc, self.__class__.mNumDoc,\ self.__class__.mDireccion, self.__class__.mPostal, self.__class__.mFono1,\ self.__class__.mFono2, self.__class__.mFax, self.__class__.mEmail,\ self.__class__.mCelular, self.__class__.mWeb, self.__class__.mLinCredito) self.cnn.__class__.SQL=sql try: rs=self.cnn.EjecutarSQL('Insert') if rs==False: return False else: return True except errores.ConexionError, err: print "Error:",err.mensaje except errores.ConexionEjecucionError, err: print "Error:",err.msgEjec self.CargarClientes() #------------------------------------------------------------------------------- def GeneraCod(self): """Genera el Codigo Unico para este cliente.""" sql="Select MAX(Codigo) from tblClientes" self.cnn.__class__.SQL=sql try: rs=self.cnn.EjecutarSQL() except errores.ConexionError, err: print "Error:",err.mensaje except errores.ConexionEjecucionError, err: print "Error:",err.msgEjec #Si es el primer registro en la Tabla if rs[0][0]==None: cod=modGlobals.CrearCodigo('', 'C',9) else: cod=modGlobals.CrearCodigo(rs[0][0],'C', 9) return cod #------------------------------------------------------------------------------- def Edita(self, mCod): """Edita los datos.""" sql="Update Where ID=%d" %(mCod) self.cnn.__class__.SQL=sql try: rs=self.cnn.EjecutarSQL('Update') if rs==False: return False else: return True except errores.ConexionError, err: print "Error:",err.mensaje except errores.ConexionEjecucionError, err: print "Error:",err.msgEjec #------------------------------------------------------------------------------- def BuscarClte(self,mCod): sql="Select * From tblClientes Where ID=%d" %(mCod) self.cnn.__class__.SQL=sql try: rs=self.cnn.EjecutarSQL() return rs except errores.ConexionError, err: print "Error:",err.mensaje except errores.ConexionEjecucionError, err: print "Error:",err.msgEjec ====================================================================== ====================================================================== ====================================================================== ====================================================================== FILE: FRMCLIENTESNE.PY ====================================================================== # -*- coding: utf8 -*-# #Boa:Frame:Frame1 import wx import modGlobals from Conectar import Conectar import errores from frmClientes import D_Cltes def create(parent, mTipo, mCodClte=''): return Frame1(parent, mTipo, mCodClte) [wxID_FRAME1, wxID_FRAME1BTNOK, wxID_FRAME1BTNSALIR, wxID_FRAME1CBOTIPODOC, wxID_FRAME1LBLCEL, wxID_FRAME1LBLCOD, wxID_FRAME1LBLCODIGO, wxID_FRAME1LBLCP, wxID_FRAME1LBLCTE, wxID_FRAME1LBLDIREC, wxID_FRAME1LBLEMAIL, wxID_FRAME1LBLF1, wxID_FRAME1LBLF2, wxID_FRAME1LBLFAX, wxID_FRAME1LBLLIN, wxID_FRAME1LBLNUM, wxID_FRAME1LBLTD, wxID_FRAME1LBLWEB, wxID_FRAME1PANEL1, wxID_FRAME1TXTCELU, wxID_FRAME1TXTCLTE, wxID_FRAME1TXTDIREC, wxID_FRAME1TXTEMAIL, wxID_FRAME1TXTFAX, wxID_FRAME1TXTFONO1, wxID_FRAME1TXTFONO2, wxID_FRAME1TXTLINCRE, wxID_FRAME1TXTNUMDOC, wxID_FRAME1TXTPOSTAL, wxID_FRAME1TXTWEB, ] = [wx.NewId() for _init_ctrls in range(30)] class Frame1(wx.Frame): TipoOper=None CodClte=None def _init_coll_fsClte_Growables(self, parent): # generated method, don't edit parent.AddGrowableRow(0) parent.AddGrowableRow(1) parent.AddGrowableCol(0) def _init_coll_fsCtrls_Items(self, parent): # generated method, don't edit parent.AddWindow(self.lblCod, 0, border=5, flag=0) parent.AddWindow(self.lblCodigo, 0, border=5, flag=0) parent.AddWindow(self.lblCte, 0, border=5, flag=0) parent.AddWindow(self.txtClte, 0, border=5, flag=0) parent.AddWindow(self.lblTD, 0, border=5, flag=0) parent.AddWindow(self.cboTipoDoc, 0, border=5, flag=0) parent.AddWindow(self.lblNum, 0, border=5, flag=0) parent.AddWindow(self.txtNumDoc, 0, border=5, flag=0) parent.AddWindow(self.lblDirec, 0, border=5, flag=0) parent.AddWindow(self.txtDirec, 0, border=5, flag=0) parent.AddWindow(self.lblCP, 0, border=5, flag=0) parent.AddWindow(self.txtPostal, 0, border=5, flag=0) parent.AddWindow(self.lblF1, 0, border=5, flag=0) parent.AddWindow(self.txtFono1, 0, border=5, flag=0) parent.AddWindow(self.lblF2, 0, border=5, flag=0) parent.AddWindow(self.txtFono2, 0, border=5, flag=0) parent.AddWindow(self.lblFax, 0, border=5, flag=0) parent.AddWindow(self.txtFax, 0, border=5, flag=0) parent.AddWindow(self.lblEmail, 0, border=5, flag=0) parent.AddWindow(self.txtEmail, 0, border=5, flag=0) parent.AddWindow(self.lblWeb, 0, border=5, flag=0) parent.AddWindow(self.txtWeb, 0, border=5, flag=0) parent.AddWindow(self.lblCel, 0, border=5, flag=0) parent.AddWindow(self.txtCelu, 0, border=5, flag=0) parent.AddWindow(self.lblLin, 0, border=5, flag=0) parent.AddWindow(self.txtLinCre, 0, border=5, flag=0) def _init_coll_fsClte_Items(self, parent): # generated method, don't edit parent.AddSizer(self.fsCtrls, 1, border=5, flag=wx.ALIGN_CENTER_HORIZONTAL) parent.AddSizer(self.fsBtn, 1, border=5, flag=wx.ALIGN_CENTER_HORIZONTAL) def _init_coll_fsBtn_Items(self, parent): # generated method, don't edit parent.AddWindow(self.btnOk, 0, border=5, flag=wx.ALL | wx.EXPAND) parent.AddWindow(self.btnSalir, 0, border=5, flag=wx.ALL | wx.EXPAND) def _init_coll_bsClte_Items(self, parent): # generated method, don't edit parent.AddWindow(self.panel1, 0, border=0, flag=wx.EXPAND) def _init_sizers(self): # generated method, don't edit self.bsClte = wx.BoxSizer(orient=wx.VERTICAL) self.fsClte = wx.FlexGridSizer(cols=0, hgap=0, rows=2, vgap=0) self.fsCtrls = wx.FlexGridSizer(cols=2, hgap=1, rows=0, vgap=2) self.fsBtn = wx.FlexGridSizer(cols=2, hgap=0, rows=0, vgap=0) self._init_coll_bsClte_Items(self.bsClte) self._init_coll_fsClte_Items(self.fsClte) self._init_coll_fsClte_Growables(self.fsClte) self._init_coll_fsCtrls_Items(self.fsCtrls) self._init_coll_fsBtn_Items(self.fsBtn) self.SetSizer(self.bsClte) self.panel1.SetSizer(self.fsClte) def _init_ctrls(self, prnt): # generated method, don't edit wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt, pos=wx.Point(629, 243), size=wx.Size(263, 353), style=wx.DEFAULT_FRAME_STYLE, title=u'Clientes') self.SetClientSize(wx.Size(263, 353)) self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self, pos=wx.Point(0, 0), size=wx.Size(263, 348), style=wx.TAB_TRAVERSAL) self.lblCte = wx.StaticText(id=wxID_FRAME1LBLCTE, label=u'Cliente', name=u'lblCte', parent=self.panel1, pos=wx.Point(4, 14), size=wx.Size(35, 12), style=0) self.txtClte = wx.TextCtrl(id=wxID_FRAME1TXTCLTE, name=u'txtClte', parent=self.panel1, pos=wx.Point(58, 14), size=wx.Size(200, 22), style=0, value=u'') self.txtClte.SetToolTipString(u'Nombre o Raz\xf3n Social') self.lblTD = wx.StaticText(id=wxID_FRAME1LBLTD, label=u'Tipo Doc.', name=u'lblTD', parent=self.panel1, pos=wx.Point(4, 38), size=wx.Size(45, 12), style=0) self.cboTipoDoc = wx.ComboBox(choices=[], id=wxID_FRAME1CBOTIPODOC, name=u'cboTipoDoc', parent=self.panel1, pos=wx.Point(58, 38), size=wx.Size(198, 24), style=0, value=u'') self.cboTipoDoc.SetLabel(u'') self.cboTipoDoc.Bind(wx.EVT_COMBOBOX, self.OnCboTipoDocCombobox, id=wxID_FRAME1CBOTIPODOC) self.lblNum = wx.StaticText(id=wxID_FRAME1LBLNUM, label=u'N \xfamero', name=u'lblNum', parent=self.panel1, pos=wx.Point(4, 64), size=wx.Size(38, 12), style=0) self.txtNumDoc = wx.TextCtrl(id=wxID_FRAME1TXTNUMDOC, name=u'txtNumDoc', parent=self.panel1, pos=wx.Point(58, 64), size=wx.Size(80, 22), style=0, value=u'') self.txtNumDoc.SetToolTipString(u'N\xfamero de Documento') self.lblDirec = wx.StaticText(id=wxID_FRAME1LBLDIREC, label=u'Direcci\xf3n', name=u'lblDirec', parent=self.panel1, pos=wx.Point(4, 88), size=wx.Size(47, 12), style=0) self.txtDirec = wx.TextCtrl(id=wxID_FRAME1TXTDIREC, name=u'txtDirec', parent=self.panel1, pos=wx.Point(58, 88), size=wx.Size(200, 22), style=0, value=u'') self.txtDirec.SetToolTipString(u'Direcci\xf3n') self.lblCP = wx.StaticText(id=wxID_FRAME1LBLCP, label=u'Cod.Postal', name=u'lblCP', parent=self.panel1, pos=wx.Point(4, 112), size=wx.Size(52, 12), style=0) self.txtPostal = wx.TextCtrl(id=wxID_FRAME1TXTPOSTAL, name=u'txtPostal', parent=self.panel1, pos=wx.Point(58, 112), size=wx.Size(80, 24), style=0, value=u'') self.txtPostal.SetToolTipString(u'C\xf3digo Postal') self.lblF1 = wx.StaticText(id=wxID_FRAME1LBLF1, label=u'Tel \xe9fono', name=u'lblF1', parent=self.panel1, pos=wx.Point(4, 138), size=wx.Size(39, 12), style=0) self.txtFono1 = wx.TextCtrl(id=wxID_FRAME1TXTFONO1, name=u'txtFono1', parent=self.panel1, pos=wx.Point(58, 138), size=wx.Size(80, 22), style=0, value=u'') self.lblF2 = wx.StaticText(id=wxID_FRAME1LBLF2, label=u'Tel \xe9fono', name=u'lblF2', parent=self.panel1, pos=wx.Point(4, 162), size=wx.Size(39, 12), style=0) self.txtFono2 = wx.TextCtrl(id=wxID_FRAME1TXTFONO2, name=u'txtFono2', parent=self.panel1, pos=wx.Point(58, 162), size=wx.Size(80, 22), style=0, value=u'') self.lblFax = wx.StaticText(id=wxID_FRAME1LBLFAX, label=u'Fax', name=u'lblFax', parent=self.panel1, pos=wx.Point(4, 186), size=wx.Size(16, 12), style=0) self.txtFax = wx.TextCtrl(id=wxID_FRAME1TXTFAX, name=u'txtFax', parent=self.panel1, pos=wx.Point(58, 186), size=wx.Size(80, 22), style=0, value=u'') self.lblEmail = wx.StaticText(id=wxID_FRAME1LBLEMAIL, label=u'Email', name=u'lblEmail', parent=self.panel1, pos=wx.Point(4, 210), size=wx.Size(27, 12), style=0) self.txtEmail = wx.TextCtrl(id=wxID_FRAME1TXTEMAIL, name=u'txtEmail', parent=self.panel1, pos=wx.Point(58, 210), size=wx.Size(192, 22), style=0, value=u'@') self.lblWeb = wx.StaticText(id=wxID_FRAME1LBLWEB, label=u'Website', name=u'lblWeb', parent=self.panel1, pos=wx.Point(4, 234), size=wx.Size(36, 12), style=0) self.txtWeb = wx.TextCtrl(id=wxID_FRAME1TXTWEB, name=u'txtWeb', parent=self.panel1, pos=wx.Point(58, 234), size=wx.Size(192, 22), style=0, value=u'http://') self.lblCel = wx.StaticText(id=wxID_FRAME1LBLCEL, label=u'Celular', name=u'lblCel', parent=self.panel1, pos=wx.Point(4, 258), size=wx.Size(35, 12), style=0) self.txtCelu = wx.TextCtrl(id=wxID_FRAME1TXTCELU, name=u'txtCelu', parent=self.panel1, pos=wx.Point(58, 258), size=wx.Size(80, 22), style=0, value=u'9') self.lblLin = wx.StaticText(id=wxID_FRAME1LBLLIN, label=u'Lin.Cr\xe9dito', name=u'lblLin', parent=self.panel1, pos=wx.Point(4, 282), size=wx.Size(53, 12), style=0) self.txtLinCre = wx.TextCtrl(id=wxID_FRAME1TXTLINCRE, name=u'txtLinCre', parent=self.panel1, pos=wx.Point(58, 282), size=wx.Size(80, 22), style=0, value=u'0') self.txtLinCre.SetToolTipString(u'Linea de Cr\xe9dito') self.btnOk = wx.Button(id=wxID_FRAME1BTNOK, label=u'Aceptar', name=u'btnOk', parent=self.panel1, pos=wx.Point(41, 309), size=wx.Size(85, 34), style=0) self.btnOk.SetToolTipString(u'Acepta cambios') self.btnOk.Bind(wx.EVT_BUTTON, self.OnBtnOkButton, id=wxID_FRAME1BTNOK) self.btnSalir = wx.Button(id=wxID_FRAME1BTNSALIR, label=u'Salir', name=u'btnSalir', parent=self.panel1, pos=wx.Point(136, 309), size=wx.Size(85, 34), style=0) self.btnSalir.SetToolTipString(u'Salir') self.btnSalir.Bind(wx.EVT_BUTTON, self.OnBtnSalirButton, id=wxID_FRAME1BTNSALIR) self.lblCod = wx.StaticText(id=wxID_FRAME1LBLCOD, label=u'C \xf3digo', name=u'lblCod', parent=self.panel1, pos=wx.Point(4, 0), size=wx.Size(34, 12), style=0) self.lblCodigo = wx.StaticText(id=wxID_FRAME1LBLCODIGO, label=u'', name=u'lblCodigo', parent=self.panel1, pos=wx.Point(58, 0), size=wx.Size(150, 12), style=0) self.lblCodigo.SetToolTipString(u'C\xf3digo Cliente') self.lblCodigo.SetAutoLayout(False) self._init_sizers() def __init__(self, parent, mTipo, mCodClte): self._init_ctrls(parent) self.__class__.TipoOper=mTipo self.__class__.CodClte=mCodClte #Setea tamaños minimos self.fsClte.Fit(self) self.fsClte.SetSizeHints(self) self.oClte=D_Cltes() #Estableve el Encoding self.encode='utf8' self.CargarCombo() self.CargaForm() #------------------------------------------------------------------------------- def CargaForm(self): if self.__class__.TipoOper=="E": self.dat=self.oClte.BuscarClte(self.__class__.CodClte) self.CargarCtrls() #------------------------------------------------------------------------------- def CargarCtrls(self): self.lblCodigo.SetLabel(self.dat[0][1]) self.txtClte.SetValue(self.dat[0][2]) self.cboTipoDoc.SetSelection(self.dat[0][3]-1) self.txtNumDoc.SetValue(self.dat[0][4]) self.txtDirec.SetValue(self.dat[0][5]) self.txtPostal.SetValue(self.dat[0][6]) self.txtFono1.SetValue(self.dat[0][7]) self.txtFono2.SetValue(self.dat[0][8]) self.txtFax.SetValue(self.dat[0][9]) self.txtEmail.SetValue(self.dat[0][10]) self.txtCelu.SetValue(self.dat[0][11]) self.txtWeb.SetValue(self.dat[0][12]) self.txtLinCre.SetValue(str(self.dat[0][13])) #------------------------------------------------------------------------------- def CargarCombo(self): rs=self.oClte.CargaTDoc() self.cboTipoDoc.Clear() i=0 for it in rs: x=unicode(rs[i][1],self.encode) self.cboTipoDoc.Append(x,rs[i][0]) i+=1 if self.__class__.TipoOper=="N": #Vacia el 1er elemento mostrado para q el user se vea obligado a escoger self.cboTipoDoc.SetValue('') elif self.__class__.TipoOper=="E": #Pinta el registro seleccionado pass #------------------------------------------------------------------------------- def ObtieneValores(self): self.oClte.__class__.mNombre=self.txtClte.GetValue() self.oClte.__class__.mTipoDoc=int(self.kTipoDoc) self.oClte.__class__.mNumDoc=self.txtNumDoc.GetValue() self.oClte.__class__.mDireccion=self.txtDirec.GetValue() self.oClte.__class__.mPostal=self.txtPostal.GetValue() self.oClte.__class__.mFono1=self.txtFono1.GetValue() self.oClte.__class__.mFono2=self.txtFono2.GetValue() self.oClte.__class__.mFax=self.txtFax.GetValue() self.oClte.__class__.mEmail=self.txtEmail.GetValue() self.oClte.__class__.mCelular=self.txtCelu.GetValue() self.oClte.__class__.mWeb=self.txtWeb.GetValue() self.oClte.__class__.mLinCredito=int(self.txtLinCre.GetValue()) #------------------------------------------------------------------------------- def BorrarCtrls(self): self.txtClte.Clear() self.txtNumDoc.Clear() self.txtDirec.Clear() self.cboTipoDoc.Clear() self.txtPostal.Clear() self.txtFono1.Clear() self.txtFono2.Clear() self.txtFax.Clear() self.txtEmail.Clear() self.txtCelu.Clear() self.txtWeb.Clear() self.txtLinCre.Clear() #------------------------------------------------------------------------------- def OnBtnOkButton(self, event): self.ObtieneValores() if self.__class__.TipoOper=="N": if self.oClte.Graba()==True: dlg=wx.MessageDialog(self,u'Se ingresó el nuevo Cliente.', \ 'PymeGestor',wx.OK | wx.ICON_EXCLAMATION) dlg.ShowModal() dlg.Destroy() self.BorrarCtrls() self.txtClte.SetFocus() else: dlg=wx.MessageDialog(self,u'Hubo un error al ingresar los datos.\ Corrija y vuelva a intentarlo.','PymeGestor',wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() self.txtClte.SetFocus() elif self.__class__.TipoOper=="E": self.oClte.Edita() else: pass #------------------------------------------------------------------------------- def OnBtnSalirButton(self, event): self.Close(True) #------------------------------------------------------------------------------- def OnCboTipoDocCombobox(self, event): cb = event.GetEventObject() #Obtengo el Key self.kTipoDoc = cb.GetClientData(cb.GetSelection()) #------------------------------------------------------------------------------- ============================================================================= ============================================================================= -- Mario Lacunza <[EMAIL PROTECTED]> -- http://mail.python.org/mailman/listinfo/python-list