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

Hola a todos, avancé bastante y pude solucionar el tema de los wxTextCtrl y también simplifiqué el uso de variables de tipo
usuario1, usuario2, usuario3 por una lista

Sin embargo estoy en un error del cual no puedo salir.

1) El programa lee los nombres de usuarios de la base de datos y los despliega asignando cada wxTextCtrl a un RadioButton

2) Permite cambiar los valores de los wxTextCtrl y también el usuario activo

3) Al cerrar el programa si confirmo que quiero guardar los cambios debo lograr llegar a esa parte del programa con los nuevos valores de los usuarios (los tengo guardados en una lista así que funciona) y también con el usuario activo, o sea el último RadioButton seleccionado y acá tengo el problema porque no me reconoce la variable donde almaceno ese valor

Estoy hablando de las línea 126 (donde almaceno el último RadioButton pulsado y efectivamente funciona) y la línea 54 donde imprimo esa misma variable para ver si llegó hasta allí con el valor correcto.

No importa que la defina como global, o que la ponga con un return en la línea 27, igual ESA variable no me reconoce, pero SI me reconoce a los wxTextCtrl... la verdad me tiene desorientado ese problema y llevo dos días sin poder resolverlo.


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. global usuarioactivonumeronuevo
  8.  
  9.  
  10.  
  11. def LeoUsuarios():
  12.     # Necesario para asignar valores
  13.     global listausuarios
  14.     global usuarioactivo, usuarioactivonumero
  15.  
  16.     con = lite.connect('db.usuarios')
  17.     listausuarios = []
  18.    
  19.     with con:
  20.         cur = con.cursor()    
  21.         cur.execute("SELECT * FROM Usuarios")
  22.  
  23.         while True:
  24.             row = cur.fetchone()
  25.            
  26.             if row == None:
  27.                 break
  28.  
  29.             #Tomo el valor del usuario activo
  30.             if row[2] == "S":
  31.                 print "El usuario activo es :", row[1]
  32.                 usuarioactivo = row[1]
  33.                 usuarioactivonumero = row[0]
  34.  
  35.             #print "IMPRIMO LOS TRES CAMPOS PARA VERIFICAR QUE FUERON LEIDOS"
  36.             #print row[0], row[1], row[2]
  37.            
  38.             #agrego a la lista el nombre del usuario
  39.             listausuarios.append(row[1])
  40.  
  41.         print "LISTA DE USUARIOS"
  42.         print listausuarios
  43.  
  44.     #retorno los datos de usuarios leídos
  45.     return (listausuarios)
  46.  
  47. def GuardoUsuarios():
  48.     wx.MessageBox('ACEPTAR entonces guardo los cambios', 'Info', wx.OK | wx.ICON_INFORMATION)
  49.     #Asigno nuevo usuario activo y los nuevos nombres de Usuarios a guardar
  50.     print "==========="
  51.     print "VERIFICANDO"
  52.     print "==========="
  53.     print "U S U A R I O   A C T I V O - "
  54.     print usuarioactivonumeronuevo
  55.     print "EL PRIMER USUARIO ES ", text1.GetValue()
  56.     print "EL SEGUNDO USUARIO ES ", text2.GetValue()
  57.     print "EL TERCER USUARIO ES ", text3.GetValue()
  58.     print "EL CUARTO USUARIO ES ", text4.GetValue()
  59.     print "EL QUINTO USUARIO ES ", text5.GetValue()
  60.  
  61. class RadioButtonFrame(wx.Frame):
  62.     def __init__(self):
  63.         #print "ESTOY DENTRO DE LA SEGUNDA FUNCION Y USUARIO 1 ES"
  64.         #print usuario1
  65.         print "YA DENTRO DE LA FUNCION TENGO LO SIGUIENTE"
  66.         print usuarioactivo
  67.         print usuarioactivonumero
  68.         wx.Frame.__init__(self, None, -1, 'Radio Example',
  69.                 size=(200, 200))
  70.  
  71.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  72.        
  73.         panel = wx.Panel(self, -1)
  74.         radio1 = wx.RadioButton(panel, -1, label="1", pos=(20, 50), style=wx.RB_GROUP)
  75.         radio2 = wx.RadioButton(panel, -1, label="2", pos=(20, 80))
  76.         radio3 = wx.RadioButton(panel, -1, label="3", pos=(20, 110))
  77.         radio4 = wx.RadioButton(panel, -1, label="4", pos=(20, 140))
  78.         radio5 = wx.RadioButton(panel, -1, label="5", pos=(20, 170))
  79.  
  80.         #Selecciono el Radio Button activo de acuerdo al Usuario activo leído previamente
  81.         if usuarioactivonumero == 1 : radio1.SetValue(1)
  82.         if usuarioactivonumero == 2 : radio2.SetValue(1)
  83.         if usuarioactivonumero == 3 : radio3.SetValue(1)
  84.         if usuarioactivonumero == 4 : radio4.SetValue(1)
  85.         if usuarioactivonumero == 5 : radio5.SetValue(1)
  86.        
  87.         #radio3.SetValue(1)
  88.         global text1, text2, text3, text4, text5
  89.  
  90.         text1 = wx.TextCtrl(panel, -1, listausuarios[0], pos=(80, 50))
  91.         text2 = wx.TextCtrl(panel, -1, listausuarios[1], pos=(80, 80))
  92.         text3 = wx.TextCtrl(panel, -1, listausuarios[2], pos=(80, 110))
  93.         text4 = wx.TextCtrl(panel, -1, listausuarios[3], pos=(80, 140))
  94.         text5 = wx.TextCtrl(panel, -1, listausuarios[4], pos=(80, 170))
  95.         self.texts = {"1": text1, "2": text2, "3": text3, "4": text4, "5": text5}
  96.         for eachText in [text1, text2, text3, text4, text5]:
  97.             eachText.Enable(False)
  98.         for eachRadio in [radio1, radio2, radio3, radio4, radio5]:
  99.             self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, eachRadio)
  100.  
  101.         #Selecciono el Text activo de acuerdo al Usuario activo leído previamente
  102.         self.selectedText = text1
  103.         #print "Estoy verificando y el usuario activo es -->", usuarioactivonumero
  104.        
  105.         if usuarioactivonumero == 1 : text1.Enable(True)
  106.         if usuarioactivonumero == 2 : text2.Enable(True)
  107.         if usuarioactivonumero == 3 : text3.Enable(True)
  108.         if usuarioactivonumero == 4 : text4.Enable(True)
  109.         if usuarioactivonumero == 5 : text5.Enable(True)
  110.  
  111.        
  112.  
  113.     def OnRadio(self, event):
  114.         for eachtext in [text1, text2, text3, text4, text5]:
  115.             eachtext.Enable(False)
  116.         if self.selectedText:
  117.             self.selectedText.Enable(False)
  118.         radioSelected = event.GetEventObject()
  119.        
  120.         text = self.texts[radioSelected.GetLabel()]
  121.         text.Enable(True)
  122.         self.selectedText = text
  123.  
  124.         btn = event.GetEventObject()
  125.         usuarioactivonumeronuevo = btn.GetLabel()
  126.         print "EL BOTON ACTIVO ES", usuarioactivonumeronuevo
  127.         return usuarioactivonumeronuevo
  128.  
  129.  
  130.     def OnClose(self, event):
  131.         dlg = wx.MessageDialog(self,
  132.             "Guardar los cambios realizados?",
  133.             "Confirm Exit", wx.OK|wx.CANCEL|wx.ICON_QUESTION)
  134.         result = dlg.ShowModal()
  135.         dlg.Destroy()
  136.         if result == wx.ID_OK:
  137.             GuardoUsuarios()
  138.             self.Destroy()
  139.         else:
  140.             wx.MessageBox('CANCELAR entonces NO guardo los cambios', 'Info', wx.OK | wx.ICON_INFORMATION)
  141.             self.Destroy()
  142.  
  143. if __name__ == '__main__':
  144.     app = wx.PySimpleApp()
  145.     LeoUsuarios()
  146.     #print "PERO APENAS SALGO EL VALOR DE USUARIO1 ES"
  147.     #print usuario1
  148.     frm = RadioButtonFrame()
  149.     frm.Show()
  150.     #RadioButtonFrame().Show()
  151.     app.MainLoop()