El 26 de febrero de 2011 15:09, Andrey Antoukh <and...@gmail.com> escribió:
> 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/ > el cambio que había mencionado en el correo anterior a funcionado; de eliminar este qtCore.SIGNAL y llamar el método así: self.graf.recibir_y_graficar_gramaticas(self.linea, self.pasos, self.secuencia, self.transformacion, self.intervalo) pero todavía me queda la duda de cual es el uso de las qtcore.SIGNAL, porque por ejemplo el hecho de emitir una señal puede ser remplazado por llamar a un método publico... como en este caso; que ventajas tiene realizar esto mediante una qtcore.SIGNAL o mediante un método publico.. (estoy leyendo la documentación de pyqt, aunque mi ingles no es muy bueno, para ver si aclaro esta y otras dudas) ..Saludos -- さようなら
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/