Siento que en esto de Python lo que me está trancando son las herramientas accesorias más que el propio lenguaje. O sea, con Python en el sentido clásico de lenguaje de programación me revuelvo bien pero me está complicando wxPyton y la parte de base de datos.
En el módulo que vengo armando y en el cual me han dado una mano (razpeitia sobre todo) tengo una base de datos con 5 registros, cada registro tiene número, nombre y una letra S o N para determinar si es el usuario activo o no. (Solo uno es e el activo).
Estoy desarrollando el módulo que lee esos datos, los presenta en pantalla, permite cambiar los nombres de los 5 usuarios y también cambiar cuál es el usuario activo.
Hasta ahí todo bien, lo que no estoy logrando es grabar los cambios una vez que salgo del formulario y confirmo que quiero guardar.
Línea 58.
1) no me doy cuenta como "tomar" los nuevos valores de los 5 wx.TextCtrl que en teoría en la líneas 99 a 103 son asignadas a variables independientes. Si uso usuario1 = text1 me da que la variable no es global. Probé con text1.GetValue() y tampoco
2) en el mismo def def GuardoUsuarios(): no me doy cuenta como grabar las modificaciones sin agregar nuevos registros en la base de datos. Es decir, la base de datos sigue teniendo solo 5 registros pero con datos actualizados.
En otros programas lo podía resolver con un índice o puntero, pero en este caso no me doy cuenta como lograrlo...
Agradezco cualquier idea porque la verdad quedé trancado
Código Python:
Ver original
#!/usr/bin/python # -*- coding: utf-8 -*- import sqlite3 as lite import sys import wx def LeoUsuarios(): # Necesario para asignar valores global usuario1 global usuario2 global usuario3 global usuario4 global usuario5 global usuarioactivo, usuarioactivonumero con = lite.connect('usuariosbd') listausuarios = [] with con: cur = con.cursor() cur.execute("SELECT * FROM Usuarios") while True: row = cur.fetchone() if row == None: break #Tomo el valor del usuario activo if row[2] == "S": print "El usuario activo es :", row[1] usuarioactivo = row[1] usuarioactivonumero = row[0] #agrego a la lista el nombre del usuario listausuarios.append(row[1]) #asigno cada item de la lista a una variable independiente para conservar los valores una vez que salgo del DEF usuario1 = listausuarios[0] usuario2 = listausuarios[1] usuario3 = listausuarios[2] usuario4 = listausuarios[3] usuario5 = listausuarios[4] #retorno los datos de usuarios leídos return (usuario1, usuario2, usuario3, usuario4, usuario5) def GuardoUsuarios(): wx.MessageBox('ACEPTAR entonces guardo los cambios', 'Info', wx.OK | wx.ICON_INFORMATION) #Asigno los nuevos nombres de Usuarios a guardar usuario1 = text1 print "para verificar si estoy tomando los nuevos nombres de usuarios correctamente" print "usuario1 es" print wxFrame.text1.GetValue() #Guardo las actualizaciones de los nombres de Usuarios class RadioButtonFrame(wx.Frame): def __init__(self): print "YA DENTRO DE LA FUNCION TENGO LO SIGUIENTE" print usuarioactivo print usuarioactivonumero wx.Frame.__init__(self, None, -1, 'Radio Example', size=(200, 200)) self.Bind(wx.EVT_CLOSE, self.OnClose) panel = wx.Panel(self, -1) radio1 = wx.RadioButton(panel, -1, "1", pos=(20, 50), style=wx.RB_GROUP) radio2 = wx.RadioButton(panel, -1, "2", pos=(20, 80)) radio3 = wx.RadioButton(panel, -1, "3", pos=(20, 110)) radio4 = wx.RadioButton(panel, -1, "4", pos=(20, 140)) radio5 = wx.RadioButton(panel, -1, "5", pos=(20, 170)) #Selecciono el Radio Button activo de acuerdo al Usuario activo leído previamente if usuarioactivonumero == 1 : radio1.SetValue(1) if usuarioactivonumero == 2 : radio2.SetValue(1) if usuarioactivonumero == 3 : radio3.SetValue(1) if usuarioactivonumero == 4 : radio4.SetValue(1) if usuarioactivonumero == 5 : radio5.SetValue(1) #radio3.SetValue(1) text1 = wx.TextCtrl(panel, -1, usuario1, pos=(80, 50)) text2 = wx.TextCtrl(panel, -1, usuario2, pos=(80, 80)) text3 = wx.TextCtrl(panel, -1, usuario3, pos=(80, 110)) text4 = wx.TextCtrl(panel, -1, usuario4, pos=(80, 140)) text5 = wx.TextCtrl(panel, -1, usuario5, pos=(80, 170)) self.texts = {"1": text1, "2": text2, "3": text3, "4": text4, "5": text5} for eachText in [text2, text3, text4, text5]: eachText.Enable(False) for eachRadio in [radio1, radio2, radio3, radio4, radio5]: 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 def OnClose(self, event): dlg = wx.MessageDialog(self, "Guardar los cambios realizados?", "Confirm Exit", wx.OK|wx.CANCEL|wx.ICON_QUESTION) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: GuardoUsuarios() self.Destroy() else: wx.MessageBox('CANCELAR entonces NO guardo los cambios', 'Info', wx.OK | wx.ICON_INFORMATION) self.Destroy() if __name__ == '__main__': app = wx.PySimpleApp() LeoUsuarios() RadioButtonFrame().Show() app.MainLoop()