(*) 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:
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".... 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()