<br><div class="gmail_quote">El 26 de febrero de 2011 15:09, Andrey Antoukh <span dir="ltr"><<a href="mailto:andsux@gmail.com">andsux@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
El día 26 de febrero de 2011 20:40, Rafael Antonio Laverde<br>
<div><div></div><div class="h5"><<a href="mailto:leafar91@gmail.com">leafar91@gmail.com</a>> escribió:<br>
><br>
><br>
> El 26 de febrero de 2011 13:42, Andrey Antoukh <<a href="mailto:andsux@gmail.com">andsux@gmail.com</a>> escribió:<br>
>><br>
>> El día 26 de febrero de 2011 18:39, Rafael Antonio Laverde<br>
>> <<a href="mailto:leafar91@gmail.com">leafar91@gmail.com</a>> escribió:<br>
>> > Buenos días...<br>
>> ><br>
>> > Estoy realizando un pequeño programa en python con una iterfaz grafica<br>
>> > en<br>
>> > pyqt<br>
>> ><br>
>> > he sobrescrito un objeto widget el cual realiza un pequeño dibujo,<br>
>> > dependiendo de un parámetros insertados en la interfaz<br>
>> ><br>
>> > y cuando se hace click en el boton de graficar emito la siguiente señal:<br>
>> ><br>
>> > self.graf.emit(QtCore.SIGNAL("recibir_y_graficar_datos(bool, int,<br>
>> > QString,<br>
>> > Transformacion, int)"), self.linea, self.pasos, self.secuencia,<br>
>> > self.transformacion, self.intervalo)<br>
>> ><br>
>> > conectada al widget sobrescrito mediante:<br>
>> ><br>
>> > self.connect(self, QtCore.SIGNAL("recibir_y_graficar_datos(bool, int,<br>
>> > QString, Transformacion, int)"), self.graficar)<br>
>> ><br>
>> > ---Trasformacion es una clase que cree y que tiene como atributos un<br>
>> > diccionario de listas<br>
>> ><br>
>> > pero al ejecutarlo me da el siguiente error:<br>
>> ><br>
>> > TypeError: type 'Transformacion' is not supported as a slot argument<br>
>> > type<br>
>> ><br>
>> > --mi duda es acerca de como puedo enviar objetos de clases propias<br>
>> > mediante<br>
>> > QtCoreSignal, o como acceder desde el objeto graf a los atibutos de la<br>
>> > ventana<br>
>> ><br>
>> > la estructura es mas o menos la siguiente<br>
>> ><br>
>> > class Ventana_principal(QWidget, Main_window.Ui_main_window_form):<br>
>> > def __init__(self, *args):<br>
>> > self.transformacion = self.dic_transformaciones['ninguna'] #es<br>
>> > un<br>
>> > diccionario donde estan guardadas las diferentes transformaciones<br>
>> > #otros atributos<br>
>> > self.graf = Grafica()<br>
>> > self.connect(self.graficar_pushButton,<br>
>> > QtCore.SIGNAL('clicked()'),<br>
>> > self.enviar_valores)<br>
>> ><br>
>> > def enviar_valores(self):<br>
>> ><br>
>> > self.graf.emit(QtCore.SIGNAL("recibir_y_graficar_gramaticas(bool, int,<br>
>> > QString, Transformacion, int)"), self.linea, self.pasos, self.secuencia,<br>
>> > self.transformacion, self.intervalo)<br>
>> ><br>
>> ><br>
>> > class Grafica(QtGui.QWidget):<br>
>> > super(Grafica, self).__init__()<br>
>> > self.connect(self,<br>
>> > QtCore.SIGNAL("recibir_y_graficar_gramaticas(bool,<br>
>> > int, QString, Transformacion, int)"), self.graficar)<br>
>> ><br>
>> > def graficar(self, linea, pasos, secuencia, transformacion,<br>
>> > intervalo):<br>
>> > ###algunas operaciones<br>
>> ><br>
>> > ...Gracias<br>
>> ><br>
>> Hola.<br>
>> Si no me equivoco, estas usando la manera obsoleta de conectar signals<br>
>> con slots, yo de ti me leía la documentación de PyQt que lo explica<br>
>> bastante bien.<br>
>><br>
>> Igual los ejemplos que has pegado aquí, yo personalmente no me aclaro,<br>
>> seria de agradecer que pegaras el código completo de la parte que<br>
>> falla en un pastebin, y ademas incluyeras el traceback.<br>
>><br>
>> Igual con estos datos sera mas fácil identificar el problema ademas de<br>
>> recomendarte que dejes de usar la manera obsoleta de conectar signals<br>
>> con slots.<br>
>><br>
>> Un saludo.<br>
>> Andrei.<br>
>><br>
>><br>
>> --<br>
>> <a href="http://twitter.com/andsux" target="_blank">http://twitter.com/andsux</a><br>
>> <a href="http://www.niwi.be" target="_blank">http://www.niwi.be</a><br>
>> ****<br>
>> <a href="http://www.freebsd.org/" target="_blank">http://www.freebsd.org/</a><br>
>> <a href="http://www.postgresql.org/" target="_blank">http://www.postgresql.org/</a><br>
>> <a href="http://www.python.org/" target="_blank">http://www.python.org/</a><br>
>> <a href="http://www.djangoproject.com/" target="_blank">http://www.djangoproject.com/</a><br>
>><br>
>> "Linux is for people who hate Windows, BSD is for people who love UNIX"<br>
>> "Social Engineer -> Because there is no patch for human stupidity"<br>
>> _______________________________________________<br>
>> Python-es mailing list<br>
>> <a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
>> <a href="http://mail.python.org/mailman/listinfo/python-es" target="_blank">http://mail.python.org/mailman/listinfo/python-es</a><br>
>> FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
><br>
> aca dejo el codigo en pastebin <a href="http://pastebin.com/baxsFpkq" target="_blank">http://pastebin.com/baxsFpkq</a><br>
><br>
> las lineas de interes son: 29 y 248<br>
><br>
> el traceback es:<br>
><br>
> python Implementacion_main_window.py<br>
> Traceback (most recent call last):<br>
> File "Implementacion_main_window.<br>
> py", line 276, in <module><br>
> main()<br>
> File "Implementacion_main_window.py", line 270, in main<br>
> vent = Ventana_principal()<br>
> File "Implementacion_main_window.py", line 132, in __init__<br>
> self.initUI()<br>
> File "Implementacion_main_window.py", line 173, in initUI<br>
> self.graf = Grafica()<br>
> File "Implementacion_main_window.py", line 22, in __init__<br>
> self.initUI()<br>
> File "Implementacion_main_window.py", line 30, in initUI<br>
> int, QString, Transformacion, int)"), self.graficar)<br>
> TypeError: type 'Transformacion' is not supported as a slot argument type<br>
><br>
> lo acabo de modificar quitando el qtCore.SIGNAL y en cambio llamando al<br>
> metodo directamente:<br>
><br>
> elimine la linea 29, 30 y cambie la 249, 250 por<br>
><br>
> self.graf.recibir_y_graficar_gramaticas(self.linea, self.pasos,<br>
> self.secuencia, self.transformacion, self.intervalo)<br>
><br>
> tambien elimine laconversion de la linea 262 y 49<br>
><br>
> parece funcionar.. pero no lo he probabado... porque los errores los da en<br>
> el computador de mi profesor, en el mio funciona bien incluso como estaba al<br>
> principio...<br>
><br>
> me podrían indicar cual es la forma de usar los slots (algunos enlaces), la<br>
> verdad hace muy poco que empecé a programar con pyqt y no sabia que esta<br>
> forma era obsoleta<br>
><br>
> ..Saludos<br>
><br>
> --<br>
> さようなら<br>
><br>
> _______________________________________________<br>
> Python-es mailing list<br>
> <a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
> <a href="http://mail.python.org/mailman/listinfo/python-es" target="_blank">http://mail.python.org/mailman/listinfo/python-es</a><br>
> FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
><br>
<br>
</div></div>He mirado el código muy por encima y no parece estar mal, aun así,<br>
revisa esta documentación:<br>
<a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html" target="_blank">http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html</a><br>
Aquí explica la manera nueva, mas pythonica de usar el sistema de signal/slot.<br>
<br>
Para que entiendas, es que los signals están definidos como una<br>
especie de "propiedades" por lo que asignar un slot a un signal es tan<br>
simple como:<br>
self.tuobj.tusignal.connect(self.tu_slot_method)<br>
<br>
si el slot tiene que ser un poco especifico, pues, lo defines con un decorador:<br>
<br>
@pyqtSlot(int, QObject, QWidget)<br>
def tu_slot_method(self, arg1, arg2):<br>
# lo que tenga que hacer<br>
<br>
Pero en muchos casos esto ultimo te lo puedes saltar definiendo<br>
directamente el método con el numero de parámetros que se espere, y<br>
pyqt ya lo mapea automáticamente.<br>
<br>
Espero haberme explicado.<br>
<div><div></div><div class="h5">Un saludo.<br>
Andrei.<br>
<br>
<br>
<br>
--<br>
<a href="http://twitter.com/andsux" target="_blank">http://twitter.com/andsux</a><br>
<a href="http://www.niwi.be" target="_blank">http://www.niwi.be</a><br>
****<br>
<a href="http://www.freebsd.org/" target="_blank">http://www.freebsd.org/</a><br>
<a href="http://www.postgresql.org/" target="_blank">http://www.postgresql.org/</a><br>
<a href="http://www.python.org/" target="_blank">http://www.python.org/</a><br>
<a href="http://www.djangoproject.com/" target="_blank">http://www.djangoproject.com/</a><br>
<br>
"Linux is for people who hate Windows, BSD is for people who love UNIX"<br>
"Social Engineer -> Because there is no patch for human stupidity"<br>
_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-es" target="_blank">http://mail.python.org/mailman/listinfo/python-es</a><br>
FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
</div></div></blockquote></div><br>el cambio que había mencionado en el correo anterior a funcionado; de eliminar este qtCore.SIGNAL y llamar el método así:<br><br>self.graf.recibir_y_graficar_gramaticas(self.linea, self.pasos, self.secuencia, self.transformacion, self.intervalo)<br>
<div class="h5"><br>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)<br>
<br>..Saludos<br></div><br>-- <br><font style="background-color:rgb(255, 255, 255)" size="4"><span lang="ja"><span style="color:rgb(0, 0, 0)" title="">さようなら</span></span></font><br>