Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/11/2011, 22:49
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Como realizar busquedas en todas las columnas de un wxListCtrl?

Me temo que lo tendrás que implementar por ti mismo.

Código Python:
Ver original
  1. #coding: cp1252
  2.  
  3. import wx
  4.  
  5. class MyFrame(wx.Frame):
  6.  
  7.     def __init__(self, *args, **kwargs):
  8.         wx.Frame.__init__(self, *args, **kwargs)
  9.  
  10.         panel = MyPanel(self, -1)
  11.  
  12. class MyPanel(wx.Panel):
  13.    
  14.     def __init__(self, *args, **kwargs):
  15.         wx.Panel.__init__(self, *args, **kwargs)
  16.         self.vbox = wx.BoxSizer(wx.VERTICAL)
  17.  
  18.         self.text_ctrl = wx.TextCtrl(self)
  19.         self.list_ctrl = wx.ListCtrl(self, style=wx.LC_REPORT|wx.BORDER_SUNKEN)
  20.         self.btn = wx.Button(self, label="Search")
  21.        
  22.         self.vbox.Add(self.text_ctrl, 0, wx.ALL|wx.EXPAND, 5)
  23.         self.vbox.Add(self.list_ctrl, 1, wx.ALL|wx.EXPAND, 5)
  24.         self.vbox.Add(self.btn, 0, wx.ALL|wx.CENTER, 5)
  25.        
  26.         self.list_ctrl.InsertColumn(0, 'ID')
  27.         self.list_ctrl.InsertColumn(1, 'Name')
  28.         self.list_ctrl.InsertColumn(2, 'LastName')
  29.        
  30.         self.items = [(0, 'Juan', 'Perez'),
  31.                       (1, 'Jose', 'Hernandes'),
  32.                       (2, 'Pedro', 'Gonzales')]
  33.        
  34.         for i, name, lastname in self.items:
  35.             self.list_ctrl.InsertStringItem(i, str(i))
  36.             self.list_ctrl.SetStringItem(i, 1, name)
  37.             self.list_ctrl.SetStringItem(i, 2, lastname)
  38.  
  39.         self.SetSizer(self.vbox)
  40.        
  41.         self.btn.Bind(wx.EVT_BUTTON, self.onSearch)
  42.        
  43.     def getColumns(self, row, columns):
  44.         return [self.list_ctrl.GetItem(row, j).GetText() for j in xrange(columns)]
  45.    
  46.     def onSearch(self, event):
  47.         key = self.text_ctrl.GetValue()
  48.         rows = self.list_ctrl.GetItemCount()
  49.         columns = self.list_ctrl.GetColumnCount()
  50.         results = []
  51.         for i in xrange(rows):
  52.             cols = self.getColumns(i, columns)
  53.             if key in cols:
  54.                 results.append(cols)
  55.         print results
  56.        
  57.  
  58.  
  59. if __name__ == "__main__":
  60.     app = wx.App(0)
  61.     frame = MyFrame(None, -1)
  62.     frame.Show()
  63.     app.MainLoop()
Aquí te dejo un ejemplo.

Pero si la búsqueda la puede hacer la base de datos entonces que la haga la base de datos.

Ahora si son muchos resultados solo muestra los primeros 200 o 20.