Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/12/2012, 14:18
tecafede
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 11 años, 5 meses
Puntos: 6
wxPython - Seleccionar una opción RadioBox y al mismo tiempo poder editar los nombres

Una duda, preciso generar algo como:

(*) Juan
( ) Pedro
( ) Luis
( ) Mario
( ) Ana

O sea que son wxRadioBox de los cuales solo uno puede estar activo.

Eso lo soluciono sin problemas.

El tema es que me gustaría en la misma pantalla poder editar los nombres, independientemente de que sean el nombre activo o no y guardar o cancelar los cambios.

O sea, que se pueda hacer clic en Luis y cambiar el texto Luis por Felipe por ejemplo.

Para cambiar los textos puedo usar wxTextCtrl pero la duda es si puedo combinar los wxRadioBox con wxTextCtrl, de manera que pueda resolver todo en una misma pantalla y sin repetir los textos.

En definitiva que el wxTextCtrl haga de Label del wxRadioBox y al mismo tiempo sea editable.

Creo que no hay ningún Widget que haga eso pero por ahí hay alguna biblioteca ya desarrollada que simplifique este problema.

???


Lo más parecido que encuentro es este ejemplo del libro wxPython in Accion (que me recomendó razpeitia)

Código:
import wx

class RadioButtonFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Radio Example', 
                size=(200, 200))
        panel = wx.Panel(self, -1)
        radio1 = wx.RadioButton(panel, -1, "Elmo", pos=(20, 50), style=wx.RB_GROUP)
        radio2 = wx.RadioButton(panel, -1, "Ernie", pos=(20, 80))
        radio3 = wx.RadioButton(panel, -1, "Bert", pos=(20, 110))
        text1 = wx.TextCtrl(panel, -1, "", pos=(80, 50))
        text2 = wx.TextCtrl(panel, -1, "", pos=(80, 80))
        text3 = wx.TextCtrl(panel, -1, "", pos=(80, 110))
        self.texts = {"Elmo": text1, "Ernie": text2, "Bert": text3}
        for eachText in [text2, text3]:
            eachText.Enable(False)
        for eachRadio in [radio1, radio2, radio3]:
            self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, eachRadio)
        self.selectedText = text1

    def OnRadio(self, event):
        if self.selectedText:
            self.selectedText.Enable(False)
        radioSelected = event.GetEventObject()
        text = self.texts[radioSelected.GetLabel()]
        text.Enable(True)
        self.selectedText = text

if __name__ == '__main__':
    app = wx.PySimpleApp()
    RadioButtonFrame().Show()
    app.MainLoop()
Tal vez lo que busco se podría resolver directamente ocultando las etiquetas de los wx.RadioButton y usando los wx.TextCtrl como si fueran sus etiquetas "editables"....

Última edición por tecafede; 26/12/2012 a las 14:44