O sea, si en la tabla tengo el item BRASIL cuando el usuario digita B ya le aparezca la opción de seleccionar BRASIL o puede continuar escribiendo BOLIVIA (y en este último caso que la próxima vez que digite B le aparezcan las opciones de BRASIL y BOLIVIA).
Eso lo tengo resuelto para una entrada de texto indivivual. Por ejemplo algo del estilo:
Código Python:
Ver original
import wx class PromptingComboBox(wx.ComboBox) : def __init__(self, parent, value, choices=[], style=0, **par): wx.ComboBox.__init__(self, parent, wx.ID_ANY, value, style=style|wx.CB_DROPDOWN, choices=choices, **par) self.choices = choices self.Bind(wx.EVT_TEXT, self.EvtText) self.Bind(wx.EVT_CHAR, self.EvtChar) self.Bind(wx.EVT_COMBOBOX, self.EvtCombobox) self.ignoreEvtText = False def EvtCombobox(self, event): self.ignoreEvtText = True event.Skip() def EvtChar(self, event): if event.GetKeyCode() == 8: self.ignoreEvtText = True event.Skip() def EvtText(self, event): if self.ignoreEvtText: self.ignoreEvtText = False return currentText = event.GetString() found = False for choice in self.choices : if choice.startswith(currentText): self.ignoreEvtText = True self.SetValue(choice) self.SetInsertionPoint(len(currentText)) self.SetMark(len(currentText), len(choice)) found = True break if not found: event.Skip() class TrialPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, wx.ID_ANY) choices = ['grandmother', 'grandfather', 'cousin', 'aunt', 'uncle', 'grandson', 'granddaughter'] for relative in ['mother', 'father', 'sister', 'brother', 'daughter', 'son']: choices.extend(self.derivedRelatives(relative)) cb = PromptingComboBox(self, "default value", choices, style=wx.CB_SORT) def derivedRelatives(self, relative): return [relative, 'step' + relative, relative + '-in-law'] if __name__ == '__main__': app = wx.App() frame = wx.Frame (None, -1, 'Demo PromptingComboBox Control', size=(400, 50)) TrialPanel(frame) frame.Show() app.MainLoop()
El tema es que en una interfase necesito que el usuario puede elegir hasta 10 items como estos, o sea, 10 items que pueden ser elementos que se autocompleten o elementos nuevos que se agreguen a las listas.
Las elecciones pueden ser repetidas o no, eso no importa.
En el código de ejemplo no se leen los datos de una fuente externa pero eso lo puedo resolver sin problema leyendo de un TXT, CSV o base de datos.
Las dudas que tengo son:
1) ¿Qué se estila en Python? ¿Un ComboBox diferente para cada vez que el usuario ingresa un dato o se puede de alguna manera combinar esto en un grid donde cada celda también despliegue las sugerencias de autocompletar? ¿O hay alguna biblioteca gráfica especial para este tipo de casos?
2) ¿Me conviene que los datos se almacenen en un archivo aparte, por ejemplo CSV o es mejor que estén guardados en una tabla de la base de datos general así tengo todos los datos en un solo lugar?