Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/01/2013, 06:39
tecafede
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 11 años, 6 meses
Puntos: 6
Duda tomar datos de wx.TextCtrl y actualizar registros en la BD sin agregar nuevos

Buenas amigos.

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
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import sqlite3 as lite
  5. import sys
  6. import wx
  7.  
  8.  
  9. def LeoUsuarios():
  10.     # Necesario para asignar valores
  11.     global usuario1
  12.     global usuario2
  13.     global usuario3
  14.     global usuario4
  15.     global usuario5
  16.     global usuarioactivo, usuarioactivonumero
  17.  
  18.     con = lite.connect('usuariosbd')
  19.     listausuarios = []
  20.    
  21.     with con:
  22.    
  23.         cur = con.cursor()    
  24.         cur.execute("SELECT * FROM Usuarios")
  25.  
  26.  
  27.         while True:
  28.      
  29.             row = cur.fetchone()
  30.            
  31.            
  32.        
  33.             if row == None:
  34.                 break
  35.  
  36.             #Tomo el valor del usuario activo
  37.             if row[2] == "S":
  38.                 print "El usuario activo es :", row[1]
  39.                 usuarioactivo = row[1]
  40.                 usuarioactivonumero = row[0]
  41.  
  42.            
  43.             #agrego a la lista el nombre del usuario
  44.             listausuarios.append(row[1])
  45.  
  46.  
  47.     #asigno cada item de la lista a una variable independiente para conservar los valores una vez que salgo del DEF
  48.     usuario1 = listausuarios[0]
  49.     usuario2 = listausuarios[1]
  50.     usuario3 = listausuarios[2]
  51.     usuario4 = listausuarios[3]
  52.     usuario5 = listausuarios[4]
  53.  
  54.  
  55.     #retorno los datos de usuarios leídos
  56.     return (usuario1, usuario2, usuario3, usuario4, usuario5)
  57.  
  58. def GuardoUsuarios():
  59.     wx.MessageBox('ACEPTAR entonces guardo los cambios', 'Info', wx.OK | wx.ICON_INFORMATION)
  60.     #Asigno los nuevos nombres de Usuarios a guardar
  61.     usuario1 = text1
  62.     print "para verificar si estoy tomando los nuevos nombres de usuarios correctamente"
  63.     print "usuario1 es"
  64.     print wxFrame.text1.GetValue()
  65.  
  66.     #Guardo las actualizaciones de los nombres de Usuarios
  67.    
  68.  
  69.  
  70.  
  71. class RadioButtonFrame(wx.Frame):
  72.     def __init__(self):
  73.  
  74.         print "YA DENTRO DE LA FUNCION TENGO LO SIGUIENTE"
  75.         print usuarioactivo
  76.         print usuarioactivonumero
  77.         wx.Frame.__init__(self, None, -1, 'Radio Example',
  78.                 size=(200, 200))
  79.  
  80.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  81.        
  82.         panel = wx.Panel(self, -1)
  83.         radio1 = wx.RadioButton(panel, -1, "1", pos=(20, 50), style=wx.RB_GROUP)
  84.         radio2 = wx.RadioButton(panel, -1, "2", pos=(20, 80))
  85.         radio3 = wx.RadioButton(panel, -1, "3", pos=(20, 110))
  86.         radio4 = wx.RadioButton(panel, -1, "4", pos=(20, 140))
  87.         radio5 = wx.RadioButton(panel, -1, "5", pos=(20, 170))
  88.  
  89.         #Selecciono el Radio Button activo de acuerdo al Usuario activo leído previamente
  90.         if usuarioactivonumero == 1 : radio1.SetValue(1)
  91.         if usuarioactivonumero == 2 : radio2.SetValue(1)
  92.         if usuarioactivonumero == 3 : radio3.SetValue(1)
  93.         if usuarioactivonumero == 4 : radio4.SetValue(1)
  94.         if usuarioactivonumero == 5 : radio5.SetValue(1)
  95.        
  96.        
  97.         #radio3.SetValue(1)
  98.  
  99.         text1 = wx.TextCtrl(panel, -1, usuario1, pos=(80, 50))
  100.         text2 = wx.TextCtrl(panel, -1, usuario2, pos=(80, 80))
  101.         text3 = wx.TextCtrl(panel, -1, usuario3, pos=(80, 110))
  102.         text4 = wx.TextCtrl(panel, -1, usuario4, pos=(80, 140))
  103.         text5 = wx.TextCtrl(panel, -1, usuario5, pos=(80, 170))
  104.         self.texts = {"1": text1, "2": text2, "3": text3, "4": text4, "5": text5}
  105.         for eachText in [text2, text3, text4, text5]:
  106.             eachText.Enable(False)
  107.         for eachRadio in [radio1, radio2, radio3, radio4, radio5]:
  108.             self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, eachRadio)
  109.         self.selectedText = text1
  110.  
  111.  
  112.     def OnRadio(self, event):
  113.         if self.selectedText:
  114.             self.selectedText.Enable(False)
  115.         radioSelected = event.GetEventObject()
  116.         text = self.texts[radioSelected.GetLabel()]
  117.         text.Enable(True)
  118.         self.selectedText = text
  119.  
  120.     def OnClose(self, event):
  121.         dlg = wx.MessageDialog(self,
  122.             "Guardar los cambios realizados?",
  123.             "Confirm Exit", wx.OK|wx.CANCEL|wx.ICON_QUESTION)
  124.         result = dlg.ShowModal()
  125.         dlg.Destroy()
  126.         if result == wx.ID_OK:
  127.             GuardoUsuarios()
  128.             self.Destroy()
  129.         else:
  130.             wx.MessageBox('CANCELAR entonces NO guardo los cambios', 'Info', wx.OK | wx.ICON_INFORMATION)
  131.             self.Destroy()
  132.  
  133.  
  134. if __name__ == '__main__':
  135.     app = wx.PySimpleApp()
  136.     LeoUsuarios()
  137.     RadioButtonFrame().Show()
  138.     app.MainLoop()