[Python-es] Liado con bind en tkinter

16 views
Skip to first unread message

mauricio rodriguez

unread,
May 25, 2012, 7:42:53 PM5/25/12
to La lista de python en castellano
Hola tod@s:

Estoy un poco liado con el método bind + tkinter, lo que estoy buscando es establecer un bind para ejecutar una función
que contiene una serie de sentencias entre ellas el método root.destroy().

se que si hago lo siguiente funciona

def funcion():
    foo

root.bind('<Return>, funcion)

pero en mi caso al estar dentro de una clase no funciona de ese modo

He leído la documentación pero no me aclaro como resolver el asunto.
Les dejo el código simplificado para que vean, este es una de las tantas formas que he probado
 y la que me pareció mas coherente ya que llama self.setp y es como entiendo que se llaman
 a las funciones dentro de __init__ 

Tal vez este muy equivocado y por eso la consulta.




el código

from Tkinter import *

class Ch():
    '''doc srring
    '''
    def __init__(self):

        self.root=Tk()
        self.root.title('set')
        self.label=Label(self.root, text='Attention! First set this')
        self.label.config(height=10, width=20)
        self.label.config(bg='red')
        labelfont=('times',15,'bold')
        self.label.config(font=labelfont)
        self.label.pack()
        self.root.bind('<Return>', self.setp )
        self.root.mainloop()

    def setp(self):
        return self.root.destroy()

c=Ch()


el error

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1410, in __call__
    return self.func(*args)
TypeError: setp() takes exactly 1 argument (2 given)


gracias por leerme una vez mas 

Rock Neurotiko

unread,
May 25, 2012, 7:53:52 PM5/25/12
to La lista de python en castellano
Mira que he usado veces Tkinter y nunca habia oido hablar de ese metodo :-P

Asi, a bote pronto(y como digo sin tener ni idea de ese metodo), lo que parece es que la funcion bind envia algun dato de mas a la funcion, has probado a poner otro parametro y ver que ocurre?

Estilo:

def setp(self, test):
    print test

_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/




--
Miguel García Lafuente - Rock Neurotiko
Vocal de la Junta Directiva Nacional del Partido Pirata.
Coordinador de Jóvenes Piratas en Madrid.

"Libertad en lugar de miedo." - "Información libre, sociedad libre."

El contenido de este e-mail es privado, no se permite la revelacion del contenido de este e-mail a gente ajena a él.

mauricio rodriguez

unread,
May 25, 2012, 8:00:07 PM5/25/12
to La lista de python en castellano
Genio, Genio !!!!

Mira que probé cosas XD


Tan simple como eso gracias solucionado !!

Rock Neurotiko

unread,
May 25, 2012, 8:03:34 PM5/25/12
to La lista de python en castellano
Jajajaja, de nada, si en realidad los errores de python te suelen decir todo, en este caso:
TypeError: setp() takes exactly 1 argument (2 given) 
Es decir: "Tio, la funcion solo tiene un argumento, ¿para que me pasas dos?" xDD

Por cierto, para que sirve ese metodo?

mauricio rodriguez

unread,
May 25, 2012, 8:15:01 PM5/25/12
to La lista de python en castellano
Si el error ya lo conocía, me salta  a cada rato XD, el asunto es que al leer la documentación y ver los ejemplos del tipo

def funcion():
    foo

root.bind('<Return>, funcion)

no entendía por que decía que le enviaba un argumento mas, lo único que se me ocurre es que interprete self como otro argumento....

Bind es para establecer un evento de teclado o mouse y asociarlo a un widget

Se pueden usar en casi todos los widget y con una larga lista de  pulsaciones de raton y teclas.



Rock Neurotiko

unread,
May 26, 2012, 6:01:52 AM5/26/12
to La lista de python en castellano
1) Respecto al bind, ahora que lo has dicho y he mirado el codigo que tenia, si, si que lo había usado... esta memoria u.U

2) Respecto a Python, te recomiendo leer sobre Programacion Orientada a Objetos en Python, supongo que algo sabes, ya que estas usando una clase.

El self the python es un modo de referirse a si mismo (la instancia), algo parecido al "this" de java, lo único que en la mayoria de los lenguajes este "this" es enviado y recibido automaticamente, en Python no, bueno, no del todo, enviado si es enviado, pero recibido lo tienes que coger con una variable, que puede ser self, o lo que quieras, pero self es el estandar ;-)

Cosas sobre el self: Si dentro de un metodo de clase declaras una variable como self.nombre = loquesea, esa variable será accesible en todos los metodos de esa clase.

Luego, otra cosa que al principio extraña: Normalmente a las funciones se las llama como nombre(..), pues si esa funcion es un metodo de clase, no se llama por el nombre, sino como self.nombre(..), que indica que es el metodo de esa clase. Bueno, esto si lo estas haciendo desde dentro de la misma clase, sino necesitarías hacelo: nombredeclas.nombredemetodo(..)

Bueno, pues eso, que si me he equivocado en algo (recien despertado me ando xD) corregidme :-)

mauricio rodriguez

unread,
May 26, 2012, 11:02:46 AM5/26/12
to La lista de python en castellano
Aja, no sabia los por menores de como envía python a self, ahora me cierra mas... 

Lo otro, si, aún me falta para comprender la POO yo vengo de php + programación procedimental por
lo que recién este año he tomado contacto, real, con python + poo, muchas veces me encuentro codeando de forma procedimental usando clases... si vieras que feo queda XD

Pero, poco a poco voy mejorando, ahora tengo que refactorizar mucho menos que a principio de año


Una vez mas te agradesco por el brain dump =)
Reply all
Reply to author
Forward
0 new messages