<br><div class="gmail_quote">El 26 de febrero de 2011 15:09, Andrey Antoukh <span dir="ltr">&lt;<a href="mailto:andsux@gmail.com">andsux@gmail.com</a>&gt;</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">&lt;<a href="mailto:leafar91@gmail.com">leafar91@gmail.com</a>&gt; escribió:<br>
&gt;<br>
&gt;<br>
&gt; El 26 de febrero de 2011 13:42, Andrey Antoukh &lt;<a href="mailto:andsux@gmail.com">andsux@gmail.com</a>&gt; escribió:<br>
&gt;&gt;<br>
&gt;&gt; El día 26 de febrero de 2011 18:39, Rafael Antonio Laverde<br>
&gt;&gt; &lt;<a href="mailto:leafar91@gmail.com">leafar91@gmail.com</a>&gt; escribió:<br>
&gt;&gt; &gt; Buenos días...<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Estoy realizando un pequeño programa en python con una iterfaz grafica<br>
&gt;&gt; &gt; en<br>
&gt;&gt; &gt; pyqt<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; he sobrescrito un objeto widget el cual realiza un pequeño dibujo,<br>
&gt;&gt; &gt; dependiendo de un parámetros insertados en la interfaz<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; y cuando se hace click en el boton de graficar emito la siguiente señal:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; self.graf.emit(QtCore.SIGNAL(&quot;recibir_y_graficar_datos(bool, int,<br>
&gt;&gt; &gt; QString,<br>
&gt;&gt; &gt; Transformacion, int)&quot;), self.linea, self.pasos, self.secuencia,<br>
&gt;&gt; &gt; self.transformacion, self.intervalo)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; conectada al widget sobrescrito mediante:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; self.connect(self, QtCore.SIGNAL(&quot;recibir_y_graficar_datos(bool, int,<br>
&gt;&gt; &gt; QString, Transformacion, int)&quot;), self.graficar)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ---Trasformacion es una clase que cree y que tiene como atributos un<br>
&gt;&gt; &gt; diccionario de listas<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; pero al ejecutarlo me da el siguiente error:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; TypeError: type &#39;Transformacion&#39; is not supported as a slot argument<br>
&gt;&gt; &gt; type<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --mi duda es acerca de como puedo enviar objetos de clases propias<br>
&gt;&gt; &gt; mediante<br>
&gt;&gt; &gt; QtCoreSignal, o como acceder desde el objeto graf a los atibutos de la<br>
&gt;&gt; &gt; ventana<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; la estructura es mas o menos la siguiente<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; class Ventana_principal(QWidget, Main_window.Ui_main_window_form):<br>
&gt;&gt; &gt;     def __init__(self, *args):<br>
&gt;&gt; &gt;         self.transformacion = self.dic_transformaciones[&#39;ninguna&#39;]  #es<br>
&gt;&gt; &gt; un<br>
&gt;&gt; &gt; diccionario donde estan guardadas las diferentes transformaciones<br>
&gt;&gt; &gt;         #otros atributos<br>
&gt;&gt; &gt;         self.graf = Grafica()<br>
&gt;&gt; &gt;         self.connect(self.graficar_pushButton,<br>
&gt;&gt; &gt; QtCore.SIGNAL(&#39;clicked()&#39;),<br>
&gt;&gt; &gt; self.enviar_valores)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;        def enviar_valores(self):<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; self.graf.emit(QtCore.SIGNAL(&quot;recibir_y_graficar_gramaticas(bool, int,<br>
&gt;&gt; &gt; QString, Transformacion, int)&quot;), self.linea, self.pasos, self.secuencia,<br>
&gt;&gt; &gt; self.transformacion, self.intervalo)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; class Grafica(QtGui.QWidget):<br>
&gt;&gt; &gt;     super(Grafica, self).__init__()<br>
&gt;&gt; &gt;     self.connect(self,<br>
&gt;&gt; &gt; QtCore.SIGNAL(&quot;recibir_y_graficar_gramaticas(bool,<br>
&gt;&gt; &gt; int, QString, Transformacion, int)&quot;), self.graficar)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;     def graficar(self, linea, pasos, secuencia, transformacion,<br>
&gt;&gt; &gt; intervalo):<br>
&gt;&gt; &gt;         ###algunas operaciones<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ...Gracias<br>
&gt;&gt; &gt;<br>
&gt;&gt; Hola.<br>
&gt;&gt; Si no me equivoco, estas usando la manera obsoleta de conectar signals<br>
&gt;&gt; con slots, yo de ti me leía la documentación de PyQt que lo explica<br>
&gt;&gt; bastante bien.<br>
&gt;&gt;<br>
&gt;&gt; Igual los ejemplos que has pegado aquí, yo personalmente no me aclaro,<br>
&gt;&gt; seria de agradecer que pegaras el código completo de la parte que<br>
&gt;&gt; falla en un pastebin, y ademas incluyeras el traceback.<br>
&gt;&gt;<br>
&gt;&gt; Igual con estos datos sera mas fácil identificar el problema ademas de<br>
&gt;&gt; recomendarte que dejes de usar la manera obsoleta de conectar signals<br>
&gt;&gt; con slots.<br>
&gt;&gt;<br>
&gt;&gt; Un saludo.<br>
&gt;&gt; Andrei.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; <a href="http://twitter.com/andsux" target="_blank">http://twitter.com/andsux</a><br>
&gt;&gt; <a href="http://www.niwi.be" target="_blank">http://www.niwi.be</a><br>
&gt;&gt; ****<br>
&gt;&gt; <a href="http://www.freebsd.org/" target="_blank">http://www.freebsd.org/</a><br>
&gt;&gt; <a href="http://www.postgresql.org/" target="_blank">http://www.postgresql.org/</a><br>
&gt;&gt; <a href="http://www.python.org/" target="_blank">http://www.python.org/</a><br>
&gt;&gt; <a href="http://www.djangoproject.com/" target="_blank">http://www.djangoproject.com/</a><br>
&gt;&gt;<br>
&gt;&gt; &quot;Linux is for people who hate Windows, BSD is for people who love UNIX&quot;<br>
&gt;&gt; &quot;Social Engineer -&gt; Because there is no patch for human stupidity&quot;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Python-es mailing list<br>
&gt;&gt; <a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
&gt;&gt; <a href="http://mail.python.org/mailman/listinfo/python-es" target="_blank">http://mail.python.org/mailman/listinfo/python-es</a><br>
&gt;&gt; FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
&gt;<br>
&gt; aca dejo el codigo en pastebin <a href="http://pastebin.com/baxsFpkq" target="_blank">http://pastebin.com/baxsFpkq</a><br>
&gt;<br>
&gt; las lineas de interes son: 29 y 248<br>
&gt;<br>
&gt; el traceback es:<br>
&gt;<br>
&gt; python Implementacion_main_window.py<br>
&gt; Traceback (most recent call last):<br>
&gt;  File &quot;Implementacion_main_window.<br>
&gt; py&quot;, line 276, in &lt;module&gt;<br>
&gt;    main()<br>
&gt;  File &quot;Implementacion_main_window.py&quot;, line 270, in main<br>
&gt;    vent = Ventana_principal()<br>
&gt;  File &quot;Implementacion_main_window.py&quot;, line 132, in __init__<br>
&gt;    self.initUI()<br>
&gt;  File &quot;Implementacion_main_window.py&quot;, line 173, in initUI<br>
&gt;    self.graf = Grafica()<br>
&gt;  File &quot;Implementacion_main_window.py&quot;, line 22, in __init__<br>
&gt;    self.initUI()<br>
&gt;  File &quot;Implementacion_main_window.py&quot;, line 30, in initUI<br>
&gt;    int, QString, Transformacion, int)&quot;), self.graficar)<br>
&gt; TypeError: type &#39;Transformacion&#39; is not supported as a slot argument type<br>
&gt;<br>
&gt; lo acabo de modificar quitando el qtCore.SIGNAL y en cambio llamando al<br>
&gt; metodo directamente:<br>
&gt;<br>
&gt; elimine la linea 29, 30 y cambie la 249, 250 por<br>
&gt;<br>
&gt; self.graf.recibir_y_graficar_gramaticas(self.linea, self.pasos,<br>
&gt; self.secuencia, self.transformacion, self.intervalo)<br>
&gt;<br>
&gt; tambien elimine laconversion de la linea 262 y 49<br>
&gt;<br>
&gt; parece funcionar.. pero no lo he probabado... porque los errores los da en<br>
&gt; el computador de mi profesor, en el mio funciona bien incluso como estaba al<br>
&gt; principio...<br>
&gt;<br>
&gt; me podrían indicar cual es la forma de usar los slots (algunos enlaces), la<br>
&gt; verdad hace muy poco que empecé a programar con pyqt y no sabia que esta<br>
&gt; forma era obsoleta<br>
&gt;<br>
&gt; ..Saludos<br>
&gt;<br>
&gt; --<br>
&gt; さようなら<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Python-es mailing list<br>
&gt; <a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
&gt; <a href="http://mail.python.org/mailman/listinfo/python-es" target="_blank">http://mail.python.org/mailman/listinfo/python-es</a><br>
&gt; FAQ: <a href="http://python-es-faq.wikidot.com/" target="_blank">http://python-es-faq.wikidot.com/</a><br>
&gt;<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 &quot;propiedades&quot; 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>
&quot;Linux is for people who hate Windows, BSD is for people who love UNIX&quot;<br>
&quot;Social Engineer -&gt; Because there is no patch for human stupidity&quot;<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>