Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Príncipe_Azul en 1 Marzo 2014, 04:13 am



Título: [Python] Duda con atajo de teclado en una ventana padre creada con wxPython
Publicado por: Príncipe_Azul en 1 Marzo 2014, 04:13 am
Hola amigos, espero que anden bien!!

Bueno les comento que estoy comenzando con interfaz grafica de usuario (GUIs), para eso utilizo el programa wxPython, que bien podria utilizar TKinter, pero me gusta mas wxPython.

Bueno tengo una duda, quisiera saber si es posible utilizar la tecla Esc (Escape) para salir de un programa, osea de una ventana padre, mediante el metodo de ejemplo:

Código:
        quit = wx.MenuItem(file, 105, '&Quit\tCtrl+Q', 'Quit the Application')
        quit.SetBitmap(wx.Bitmap('probar.png'))
        file.AppendItem(quit)

y lo que yo quisiera saber si es posible asignar la tecla de Escape para cerrar un programa al pulsar la misma, por ejemplo algo asi:

Código:
 
quit = wx.MenuItem(file, 105, '&Quit\tEsc', 'Quit the pplication')

tambien pobre asi:

Código:
 
quit = wx.MenuItem(file, 105, '&Quit\tEscape', 'Quit the pplication')

pero ninguno me sirvio, asi que la verdad no se que hacer, no logro poder asigar la tecla de Escape para cerrar el programa.

¿Alguien sería tan amable de ayudarme? Por favor.

Desde ya compañeros muchas gracias y que tengan buen día!!


PD: Les informo a los Administradores que hay 4 caritas que no se ven cuando se escribe un nuevo post, las mismas son:
Código:
:¬¬
Código:
:xD
Código:
;-)
Código:
:silbar:


Título: Re: [Python] Duda con atajo de teclado en una ventana padre creada con wxPython
Publicado por: Príncipe_Azul en 4 Marzo 2014, 08:11 am
Hola nuevamente !
He podido sacarme la duda gracias a un amigo de un Foro que me ha ayudado!!
Bueno les dejaré aquí el código para poder utilizar la tecla ESCape en una ventana creada con wxPython.
Bueno, antes quiero comentar que he tenido problemas con un código ya que no me funcionaba, pero haciendo pruebas comprobé que si funcionaba a la perfección, sólo que había que hacer clic en algún sector del programa que no sea un control/componente, ya que ahí no se podría ejecutar el evento (sobre un control).
Para poder hacer esto posible se necesitaría crear un evento en cada control, de esa manera si un objeto está enfocado en si mismo, lo mismo se producirá el evento al presionar la tecla ESCape que equivale al código ASCII (char 27).
Bueno aquí les dejo el ejemplo:

Código
  1. self.Bind(wx.EVT_KEY_UP, self.key_up)

Este es el método que se utilizaría para que el evento surja efecto al presionar ESCape.
Pues ahora queda hacer lo mismo para los demás controles, por ejemplo:

Código
  1. self.CheckBox.Bind(wx.EVT_KEY_UP, self.key_up)
  2. self.RadioButton.Bind(wx.EVT_KEY_UP, self.key_up)
  3. self.Button.Bind(wx.EVT_KEY_UP, self.key_up)
  4. self.TextCtrl.Bind(wx.EVT_KEY_UP, self.key_up)

y listo! eso es todo, sólo se debería crear la función key_up como se muestra abajo:

Código
  1. def key_up(self, event):
  2.    event.Skip()
  3.    if event.GetKeyCode() == 27: # Escape
  4.        # Codigo para cerrar tu aplicacion
  5.        self.Close(True)

y ya con eso sólo esperaremos la llamada de algún control para así comprobar que la tecla pulsada sea ESCape, caso afirmativo, se procederá a cerrar la aplicación.
Bueno amigos espero que les haya servido la explicación y el ejemplo.
Gracias igualmente por este espacio y por una posible ayuda.
Hasta pronto!! y Gracias a todos!
Que tengan buen comienzo de semana!!