Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Wxpython SetFocus, continuar con el siguinete component presionando tecla tab

Estas en el tema de Wxpython SetFocus, continuar con el siguinete component presionando tecla tab en el foro de Python en Foros del Web. Primero que nada agradezco su ayuda de antemano. En primer lugar uso GNU/Linux (Debian), estuve leyendo por la web hasta ahora no he encontrado nada, ...
  #1 (permalink)  
Antiguo 07/03/2013, 18:15
 
Fecha de Ingreso: enero-2011
Ubicación: En un Cuarto Cubierto de Pasto Verde
Mensajes: 95
Antigüedad: 13 años, 11 meses
Puntos: 3
Wxpython SetFocus, continuar con el siguinete component presionando tecla tab

Primero que nada agradezco su ayuda de antemano.

En primer lugar uso GNU/Linux (Debian), estuve leyendo por la web hasta ahora no he encontrado nada, el problema que tengo es el siguiente:

Quiero pasar el foco de un cuadro de texto a otro sin necesidad de usar el mouse, en estos momentos logro colocar en un campo de texto el foco de esta manera:
Código Python:
Ver original
  1. self.tc1.SetFocus()
Tengo otro campo de texto llamado tc2 pero al presionar la tecla tab (tabulador) el foco no se va al siguiente componente tc2 si no que se queda en el mismo lugar sin avanzar.

El campo de texto los tengo declarados de esta manera:
Código Python:
Ver original
  1. self.tc1 = wx.TextCtrl(self, -1, size=(100, -1))

Espero me puedan orientar, gracias.
  #2 (permalink)  
Antiguo 07/03/2013, 21:22
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 11 meses
Puntos: 35
Respuesta: Wxpython SetFocus, continuar con el siguinete component presionando tecla

Hola. Puedes usar el evento KeyUp para detectar la tecla presionada.
Por lo que el código podría quedar algo así:

Código Python:
Ver original
  1. self.tcl.Bind(wx.EVT_KEY_UP, self.tcl_key_up)
  2. ...
  3. def tcl_key_up(self, event):
  4.     event.Skip()
  5.     if event.GetKeyCode() == 9: # Tab
  6.             self.tc1.SetFocus()

No estoy seguro si 9 es el keycode de la tecla tab, deberías verificar.

Espero que te sea de utilidad!

  #3 (permalink)  
Antiguo 07/03/2013, 22:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Wxpython SetFocus, continuar con el siguinete component presionando tecla

Aquí hay como hacer jalar los tabs.

http://wiki.wxpython.org/Getting%20S...t_tabs_to_work
  #4 (permalink)  
Antiguo 07/03/2013, 23:47
 
Fecha de Ingreso: enero-2011
Ubicación: En un Cuarto Cubierto de Pasto Verde
Mensajes: 95
Antigüedad: 13 años, 11 meses
Puntos: 3
Respuesta: Wxpython SetFocus, continuar con el siguinete component presionando tecla

Disculpar por el mal tabulado del texto, así lo arrojo al pegar y no me di cuenta.

Gracias por sus respuestas, ya he leído las dos ligas que me proporcionan, pero sigue sin funcionar seguramente estoy haciendo algo mal y me gustaría me pudieran ayudar. Pequeño código de ejemplo que corre, como se podrán dar cuenta el SetFocus() se lo asigno a un campo de texto pero al presionar TAB no avanza, he agregado en la creación del Frame principal la bandera wx.TAB_TRAVERSAL pero sigue sin funcionar.

Código Python:
Ver original
  1. import wx
  2.  
  3. class foco(wx.Frame):
  4.  
  5. #--------------------------------------------------------------------------------
  6. #Constructor principal
  7.     def __init__(self):
  8.         wx.Frame.__init__(self, None, wx.ID_ANY|wx.TAB_TRAVERSAL,
  9.                           "Foco", size=(300, 400),  style= wx.TAB_TRAVERSAL | wx.DEFAULT_FRAME_STYLE)  
  10.         self.InitUI()
  11.         self.Centre()
  12.         self.Show()
  13.  
  14. # Construccion de la GUI
  15.     def InitUI(self):
  16.  
  17.         panel = wx.Panel(self)
  18.  
  19.         vbox = wx.BoxSizer(wx.VERTICAL)
  20.        
  21.         hbox = wx.BoxSizer(wx.HORIZONTAL)
  22.         st1 = wx.StaticText(self,-1,label='Nombre: ')  
  23.         self.tc1 = wx.TextCtrl(self, -1, size=(100, -1))
  24.  
  25.     self.tc1.SetFocus()
  26.  
  27.         hbox.Add(st1)
  28.         hbox.Add(self.tc1, flag = wx.LEFT, border = 10)
  29.         vbox.Add(hbox, flag=wx.LEFT | wx.TOP, border=40)
  30.         vbox.Add((-1, 10))
  31.  
  32.     hbox2 = wx.BoxSizer(wx.HORIZONTAL)
  33.     st2 = wx.StaticText(self,-1, label=u"Nombre 2: ")
  34.         self.tc2 = wx.TextCtrl(self, -1, size=(100,-1))
  35.         hbox2.Add(st2)
  36.         hbox2.Add(self.tc2, flag=wx.LEFT, border=25)
  37.         vbox.Add(hbox2, flag=wx.LEFT | wx.TOP, border=40)
  38.         vbox.Add((-1,10))  
  39.    
  40.     hbox3 = wx.BoxSizer(wx.HORIZONTAL)
  41.     st3 = wx.StaticText(self, -1, label=u"Nombre 3: ")
  42.     self.tc3 = wx.TextCtrl(self, -1, size=(100, -1))
  43.     hbox3.Add(st3)
  44.     hbox3.Add(self.tc3, flag=wx.LEFT, border=20)
  45.     vbox.Add(hbox3, flag=wx.LEFT | wx.TOP | wx.BOTTOM, border=40)
  46.     vbox.Add((-1,10))
  47.  
  48.     panel.SetSizer(vbox)
  49.  
  50. #----------------------------------------------------------------------
  51. # Run the program
  52. if __name__ == "__main__":
  53.     app = wx.App(False)
  54.     frame = foco()
  55.     app.MainLoop()

De ante mano muchas Gracias.

Última edición por hiramhzr; 07/03/2013 a las 23:51 Razón: Mal edición del código
  #5 (permalink)  
Antiguo 08/03/2013, 00:46
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Wxpython SetFocus, continuar con el siguinete component presionando tecla

Código Python:
Ver original
  1. import wx
  2.  
  3. class foco(wx.Frame):
  4.  
  5. #--------------------------------------------------------------------------------
  6. #Constructor principal
  7.     def __init__(self):
  8.         wx.Frame.__init__(self, None, wx.ID_ANY,
  9.                           "Foco", size=(300, 400))  
  10.         self.InitUI()
  11.         self.Centre()
  12.         self.Show()
  13.  
  14. # Construccion de la GUI
  15.     def InitUI(self):
  16.  
  17.         panel = wx.Panel(self, style=wx.TAB_TRAVERSAL)
  18.  
  19.         vbox = wx.BoxSizer(wx.VERTICAL)
  20.        
  21.         hbox = wx.BoxSizer(wx.HORIZONTAL)
  22.         st1 = wx.StaticText(panel, -1,label='Nombre: ')  
  23.         self.tc1 = wx.TextCtrl(panel, -1, size=(100, -1))
  24.  
  25.         self.tc1.SetFocus()
  26.  
  27.         hbox.Add(st1)
  28.         hbox.Add(self.tc1, flag = wx.LEFT, border = 10)
  29.         vbox.Add(hbox, flag=wx.LEFT | wx.TOP, border=40)
  30.         vbox.Add((-1, 10))
  31.  
  32.         hbox2 = wx.BoxSizer(wx.HORIZONTAL)
  33.         st2 = wx.StaticText(panel,-1, label=u"Nombre 2: ")
  34.         self.tc2 = wx.TextCtrl(panel, -1, size=(100,-1))
  35.         hbox2.Add(st2)
  36.         hbox2.Add(self.tc2, flag=wx.LEFT, border=25)
  37.         vbox.Add(hbox2, flag=wx.LEFT | wx.TOP, border=40)
  38.         vbox.Add((-1,10))  
  39.    
  40.         hbox3 = wx.BoxSizer(wx.HORIZONTAL)
  41.         st3 = wx.StaticText(panel, -1, label=u"Nombre 3: ")
  42.         self.tc3 = wx.TextCtrl(panel, -1, size=(100, -1))
  43.         hbox3.Add(st3)
  44.         hbox3.Add(self.tc3, flag=wx.LEFT, border=20)
  45.         vbox.Add(hbox3, flag=wx.LEFT | wx.TOP | wx.BOTTOM, border=40)
  46.         vbox.Add((-1,10))
  47.      
  48.         panel.SetSizer(vbox)
  49.  
  50.         self.tc1.MoveAfterInTabOrder(self.tc3)
  51.         self.tc2.MoveAfterInTabOrder(self.tc1)
  52.         self.tc3.MoveAfterInTabOrder(self.tc2)
  53.        
  54.  
  55. #----------------------------------------------------------------------
  56. # Run the program
  57. if __name__ == "__main__":
  58.     app = wx.App(False)
  59.     frame = foco()
  60.     app.MainLoop()

Los controles deben ir dentro del panel.
  #6 (permalink)  
Antiguo 08/03/2013, 01:00
 
Fecha de Ingreso: enero-2011
Ubicación: En un Cuarto Cubierto de Pasto Verde
Mensajes: 95
Antigüedad: 13 años, 11 meses
Puntos: 3
Respuesta: Wxpython SetFocus, continuar con el siguinete component presionando tecla

Cita:
Iniciado por razpeitia Ver Mensaje
Código Python:
Ver original
  1. import wx
  2.  
  3. class foco(wx.Frame):
  4.  
  5. #--------------------------------------------------------------------------------
  6. #Constructor principal
  7.     def __init__(self):
  8.         wx.Frame.__init__(self, None, wx.ID_ANY,
  9.                           "Foco", size=(300, 400))  
  10.         self.InitUI()
  11.         self.Centre()
  12.         self.Show()
  13.  
  14. # Construccion de la GUI
  15.     def InitUI(self):
  16.  
  17.         panel = wx.Panel(self, style=wx.TAB_TRAVERSAL)
  18.  
  19.         vbox = wx.BoxSizer(wx.VERTICAL)
  20.        
  21.         hbox = wx.BoxSizer(wx.HORIZONTAL)
  22.         st1 = wx.StaticText(panel, -1,label='Nombre: ')  
  23.         self.tc1 = wx.TextCtrl(panel, -1, size=(100, -1))
  24.  
  25.         self.tc1.SetFocus()
  26.  
  27.         hbox.Add(st1)
  28.         hbox.Add(self.tc1, flag = wx.LEFT, border = 10)
  29.         vbox.Add(hbox, flag=wx.LEFT | wx.TOP, border=40)
  30.         vbox.Add((-1, 10))
  31.  
  32.         hbox2 = wx.BoxSizer(wx.HORIZONTAL)
  33.         st2 = wx.StaticText(panel,-1, label=u"Nombre 2: ")
  34.         self.tc2 = wx.TextCtrl(panel, -1, size=(100,-1))
  35.         hbox2.Add(st2)
  36.         hbox2.Add(self.tc2, flag=wx.LEFT, border=25)
  37.         vbox.Add(hbox2, flag=wx.LEFT | wx.TOP, border=40)
  38.         vbox.Add((-1,10))  
  39.    
  40.         hbox3 = wx.BoxSizer(wx.HORIZONTAL)
  41.         st3 = wx.StaticText(panel, -1, label=u"Nombre 3: ")
  42.         self.tc3 = wx.TextCtrl(panel, -1, size=(100, -1))
  43.         hbox3.Add(st3)
  44.         hbox3.Add(self.tc3, flag=wx.LEFT, border=20)
  45.         vbox.Add(hbox3, flag=wx.LEFT | wx.TOP | wx.BOTTOM, border=40)
  46.         vbox.Add((-1,10))
  47.      
  48.         panel.SetSizer(vbox)
  49.  
  50.         self.tc1.MoveAfterInTabOrder(self.tc3)
  51.         self.tc2.MoveAfterInTabOrder(self.tc1)
  52.         self.tc3.MoveAfterInTabOrder(self.tc2)
  53.        
  54.  
  55. #----------------------------------------------------------------------
  56. # Run the program
  57. if __name__ == "__main__":
  58.     app = wx.App(False)
  59.     frame = foco()
  60.     app.MainLoop()

Los controles deben ir dentro del panel.
Muchísimas Gracias de nueva cuenta razpeitia, buenas noches...

Etiquetas: foco, wxpython
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:14.