Ver Mensaje Individual
  #7 (permalink)  
Antiguo 22/01/2013, 20:41
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Duda tomar datos de wx.TextCtrl y actualizar registros en la BD sin agrega

Código MySQL:
Ver original
  1. create table if not exists Usuarios (
  2.     nombre varchar(150),
  3.     activo varchar(1)
  4. );
  5.  
  6. insert into Usuarios values (1, 'Usuario 1', 'S');
  7. insert into Usuarios values (2, 'Usuario 2', 'N');
  8. insert into Usuarios values (3, 'Usuario 3', 'N');
  9. insert into Usuarios values (4, 'Usuario 4', 'N');
  10. insert into Usuarios values (5, 'Usuario 5', 'N');

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. class User(object):
  10.     def __init__(self, _id, name, active):
  11.         self.id = _id
  12.         self.name = name
  13.         self.active = active
  14.  
  15.     def is_active(self):
  16.         return self.active == 'S'
  17.  
  18.     def set_active(self, active):
  19.         if active:
  20.             self.active = 'S'
  21.         else:
  22.             self.active = 'N'
  23.  
  24.     def __str__(self):
  25.         return self.name
  26.  
  27. class Users(object):
  28.     def __init__(self):
  29.         self.user_list = []
  30.  
  31.     def add(self, user):
  32.         self.user_list.append(user)
  33.  
  34.     def __iter__(self):
  35.         return iter(self.user_list)
  36.  
  37. def get_users():
  38.     db_connection = lite.connect('db.usuarios')
  39.     users = Users()
  40.     with db_connection:
  41.         cursor = db_connection.cursor()
  42.         cursor.execute("SELECT id, nombre, activo FROM Usuarios")
  43.  
  44.         for _id, name, active in cursor:
  45.             user = User(_id, name, active)
  46.             users.add(user)
  47.  
  48.     return users
  49.  
  50. def save_users(users):
  51.     db_connection = lite.connect('db.usuarios')
  52.     with db_connection:
  53.         cursor = db_connection.cursor()
  54.         for user in users:
  55.             query = "UPDATE Usuarios SET activo=?, nombre=? WHERE id=?"
  56.             params = (user.active, user.name, user.id)
  57.             cursor.execute(query, params)
  58.         db_connection.commit()
  59.  
  60. class RadioButtonFrame(wx.Frame):
  61.     def __init__(self):
  62.         wx.Frame.__init__(self, None, -1, 'User Admin', size=(200, 200))
  63.  
  64.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  65.        
  66.         panel = wx.Panel(self, -1)
  67.         self.widgets = []
  68.         self.users = get_users()
  69.         for i, user in enumerate(self.users):
  70.             radio = wx.RadioButton(panel, -1, label=str(i+1), pos=(20, 50+(i*30)))
  71.             text = wx.TextCtrl(panel, -1, user.name, pos=(80, 50+(i*30)))
  72.             text.Enable(False)
  73.  
  74.             if user.is_active():
  75.                 radio.SetValue(True)
  76.                 text.Enable(True)
  77.  
  78.             def OnButton(event, radio_index=i):
  79.                 self.OnRadio(event, radio_index)
  80.             radio.Bind(wx.EVT_RADIOBUTTON, OnButton)
  81.  
  82.             widget = {'radio': radio, 'text': text}
  83.             self.widgets.append(widget)
  84.  
  85.     def OnRadio(self, event, index):
  86.         for widget in self.widgets:
  87.             widget['text'].Enable(False)
  88.         widget = self.widgets[index]
  89.         widget['text'].Enable(True)
  90.  
  91.     def OnClose(self, event):
  92.         dlg = wx.MessageDialog(self, "Guardar los cambios realizados?",  "Confirmar Salida", wx.OK|wx.CANCEL|wx.ICON_QUESTION)
  93.         result = dlg.ShowModal()
  94.         dlg.Destroy()
  95.         if result == wx.ID_OK:
  96.             for user, widget in zip(self.users, self.widgets):
  97.                 user.set_active(widget['radio'].GetValue())
  98.                 user.name = widget['text'].GetValue()
  99.             save_users(self.users)
  100.         self.Destroy()
  101.  
  102. if __name__ == '__main__':
  103.     app = wx.PySimpleApp()
  104.     frm = RadioButtonFrame()
  105.     frm.Show()
  106.     app.MainLoop()

Mi intento de hacer esta pequeña app. No esta bien estructurada y hay SQL generado por un humano de por medio, pero hay te dejo la prueba.