[Python-es] Pyqt error con QtCore.SIGNAL (slot argument type)

Rafael Antonio Laverde leafar91 en gmail.com
Sab Feb 26 20:40:38 CET 2011


El 26 de febrero de 2011 13:42, Andrey Antoukh <andsux en gmail.com> escribió:

> El día 26 de febrero de 2011 18:39, Rafael Antonio Laverde
> <leafar91 en gmail.com> escribió:
> > Buenos días...
> >
> > Estoy realizando un pequeño programa en python con una iterfaz grafica en
> > pyqt
> >
> > he sobrescrito un objeto widget el cual realiza un pequeño dibujo,
> > dependiendo de un parámetros insertados en la interfaz
> >
> > y cuando se hace click en el boton de graficar emito la siguiente señal:
> >
> > self.graf.emit(QtCore.SIGNAL("recibir_y_graficar_datos(bool, int,
> QString,
> > Transformacion, int)"), self.linea, self.pasos, self.secuencia,
> > self.transformacion, self.intervalo)
> >
> > conectada al widget sobrescrito mediante:
> >
> > self.connect(self, QtCore.SIGNAL("recibir_y_graficar_datos(bool, int,
> > QString, Transformacion, int)"), self.graficar)
> >
> > ---Trasformacion es una clase que cree y que tiene como atributos un
> > diccionario de listas
> >
> > pero al ejecutarlo me da el siguiente error:
> >
> > TypeError: type 'Transformacion' is not supported as a slot argument type
> >
> > --mi duda es acerca de como puedo enviar objetos de clases propias
> mediante
> > QtCoreSignal, o como acceder desde el objeto graf a los atibutos de la
> > ventana
> >
> > la estructura es mas o menos la siguiente
> >
> > class Ventana_principal(QWidget, Main_window.Ui_main_window_form):
> >     def __init__(self, *args):
> >         self.transformacion = self.dic_transformaciones['ninguna']  #es
> un
> > diccionario donde estan guardadas las diferentes transformaciones
> >         #otros atributos
> >         self.graf = Grafica()
> >         self.connect(self.graficar_pushButton,
> QtCore.SIGNAL('clicked()'),
> > self.enviar_valores)
> >
> >        def enviar_valores(self):
> >
> > self.graf.emit(QtCore.SIGNAL("recibir_y_graficar_gramaticas(bool, int,
> > QString, Transformacion, int)"), self.linea, self.pasos, self.secuencia,
> > self.transformacion, self.intervalo)
> >
> >
> > class Grafica(QtGui.QWidget):
> >     super(Grafica, self).__init__()
> >     self.connect(self, QtCore.SIGNAL("recibir_y_graficar_gramaticas(bool,
> > int, QString, Transformacion, int)"), self.graficar)
> >
> >     def graficar(self, linea, pasos, secuencia, transformacion,
> intervalo):
> >         ###algunas operaciones
> >
> > ...Gracias
> >
> Hola.
> Si no me equivoco, estas usando la manera obsoleta de conectar signals
> con slots, yo de ti me leía la documentación de PyQt que lo explica
> bastante bien.
>
> Igual los ejemplos que has pegado aquí, yo personalmente no me aclaro,
> seria de agradecer que pegaras el código completo de la parte que
> falla en un pastebin, y ademas incluyeras el traceback.
>
> Igual con estos datos sera mas fácil identificar el problema ademas de
> recomendarte que dejes de usar la manera obsoleta de conectar signals
> con slots.
>
> Un saludo.
> Andrei.
>
>
> --
> http://twitter.com/andsux
> http://www.niwi.be
> ****
> http://www.freebsd.org/
> http://www.postgresql.org/
> http://www.python.org/
> http://www.djangoproject.com/
>
> "Linux is for people who hate Windows, BSD is for people who love UNIX"
> "Social Engineer -> Because there is no patch for human stupidity"
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>

aca dejo el codigo en pastebin http://pastebin.com/baxsFpkq

las lineas de interes son: 29 y 248

el traceback es:

python Implementacion_main_window.py
Traceback (most recent call last):
 File "Implementacion_main_window.
py", line 276, in <module>
   main()
 File "Implementacion_main_window.py", line 270, in main
   vent = Ventana_principal()
 File "Implementacion_main_window.py", line 132, in __init__
   self.initUI()
 File "Implementacion_main_window.py", line 173, in initUI
    self.graf = Grafica()
 File "Implementacion_main_window.py", line 22, in __init__
   self.initUI()
 File "Implementacion_main_window.py", line 30, in initUI
    int, QString, Transformacion, int)"), self.graficar)
TypeError: type 'Transformacion' is not supported as a slot argument type

lo acabo de modificar quitando el qtCore.SIGNAL y en cambio llamando al
metodo directamente:

elimine la linea 29, 30 y cambie la 249, 250 por

self.graf.recibir_y_graficar_gramaticas(self.linea, self.pasos,
self.secuencia, self.transformacion, self.intervalo)

tambien elimine laconversion de la linea 262 y 49

parece funcionar.. pero no lo he probabado... porque los errores los da en
el computador de mi profesor, en el mio funciona bien incluso como estaba al
principio...

me podrían indicar cual es la forma de usar los slots (algunos enlaces), la
verdad hace muy poco que empecé a programar con pyqt y no sabia que esta
forma era obsoleta

..Saludos

-- 
さようなら
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110226/3e1ef744/attachment.html>


Más información sobre la lista de distribución Python-es