28/12/2012, 07:34
|
| | 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()
|