El día 26 de febrero de 2011 20:40, Rafael Antonio Laverde <leafa...@gmail.com> escribió: > > > El 26 de febrero de 2011 13:42, Andrey Antoukh <and...@gmail.com> escribió: >> >> El día 26 de febrero de 2011 18:39, Rafael Antonio Laverde >> <leafa...@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@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 > > -- > さようなら > > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ >
He mirado el código muy por encima y no parece estar mal, aun así, revisa esta documentación: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html Aquí explica la manera nueva, mas pythonica de usar el sistema de signal/slot. Para que entiendas, es que los signals están definidos como una especie de "propiedades" por lo que asignar un slot a un signal es tan simple como: self.tuobj.tusignal.connect(self.tu_slot_method) si el slot tiene que ser un poco especifico, pues, lo defines con un decorador: @pyqtSlot(int, QObject, QWidget) def tu_slot_method(self, arg1, arg2): # lo que tenga que hacer Pero en muchos casos esto ultimo te lo puedes saltar definiendo directamente el método con el numero de parámetros que se espere, y pyqt ya lo mapea automáticamente. Espero haberme explicado. 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@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/