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#!/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()