Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/12/2012, 07:34
tecafede
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años
Puntos: 6
Respuesta: wxPython - Seleccionar una opción RadioBox y al mismo tiempo poder editar

Sigo avanzando pero estoy trancado con el tema de variables globales y como retornar valores de una función.

1) Desde una base de datos leo una tabla y tomo los nombres de los usuarios. Son siempre 5 usuarios así que eso simplifica la tarea

2) deseo tomar esos nombres de usuarios leídos y usarlos como los textos que acompañan a los radioButton

Sin embargo los valores de los usuarios se pierden una vez que salgo del DEF y creo estar haciendo bien la definición de variables globales (inicializando afuera del DEF) y también el retur correspondiente....

Código fuente y Base de datos:
http://www.filedropper.com/variablesglobales

qué está mal?

El código tiene varios print para poder mostrar los valores dentro de cada DEF y fuera.

Código:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sqlite3 as lite
import sys
import wx

def LeoUsuarios():
    con = lite.connect('usuarios.db')
    listausuarios = []
    
    with con:
    
        cur = con.cursor()    
        cur.execute("SELECT * FROM Usuarios")


        while True:
      
            row = cur.fetchone()
            
            
        
            if row == None:
                break

            print "IMPRIMO LOS TRES CAMPOS PARA VERIFICAR QUE FUERON LEIDOS"
            print row[0], row[1], row[2]
            
            #agrego a la lista el nombre del usuario
            listausuarios.append(row[1])
            #print listausuarios


    #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]

    #imprimo las variables para ver si va todo bien
    print usuario1
    print usuario2
    print usuario3
    print usuario4
    print usuario5


    print "ANTES DE SALIR EL VALOR DE USUARIO 1 ES ", usuario1
    #retorno los datos de usuarios leídos
    return (usuario1, usuario2, usuario3, usuario4, usuario5)





class RadioButtonFrame(wx.Frame):
    def __init__(self):
        print "ESTOY DENTRO DE LA SEGUNDA FUNCION Y USUARIO 1 ES"
        print usuario1
        wx.Frame.__init__(self, None, -1, 'Radio Example', 
                size=(200, 200))
        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))
        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 CambiaTexto(self, event):
        EVT_TEXT(id, func)

if __name__ == '__main__':
    #defino variables globales
    usuario1 = ""
    usuario2 = ""
    usuario3 = ""
    usuario4 = ""
    usuario5 = ""
    app = wx.PySimpleApp()
    LeoUsuarios()
    print "PERO APENAS SALGO EL VALOR DE USUARIO1 ES"
    print usuario1
    RadioButtonFrame().Show()
    app.MainLoop()