[pyar] Alguien ha trabajado con QThread de PyQt?

Sebastián Seba ssebastianj en gmail.com
Sab Jul 11 14:44:00 ART 2015


El 10 de julio de 2015, 21:38, Gabriel Acosta <acostadariogabriel en gmail.com>
escribió:

> El funcionamiento es básicamente el mismo a thread de Python, con la
> diferencia que con QThread al heredar de QObject, podes emitir, conectar
> señales.
>
> class Thread(QThread):
>     def __init__(self):
>         QThread.__init__(self)
>
>     def run(self):
>         pass
>
> El método run() se ejecuta cuando inicias el thread:
>
> self.thread = Thread()
> self.thread.start()
>
> Saludos.
>
> Gabriel Acosta
> http://centaurialpha.github.io
> On Jul 10, 2015 8:27 PM, "Enrique Alejandro Villafañe" <
> villafane.enrique en gmail.com> wrote:
>
>> Nuevamente escribo con algo referente a las interfaces graficas, ya me he
>> estudiado el uso de PyQt y gracias a los tutoriales de Gabriel Acosta he
>> entendido el funcionamiento basico de los widgets y las funciones, pero
>> resulta que para mi necesidad la cosa va mas complicada de lo que parecia,
>> yo tengo una aplicacion que se encarga de escuchar por puerto serial unas
>> tramas, mi aplicacion gracias al modulo threads de python maneja varios
>> puertos al mismo tiempo y hasta ahi todo el proceso perfecto, el problema
>> es que ahora para hacerle interfaz grafica mi idea es sencilla, una ventana
>> con algunos tabs y dentro de los tabs unas tablas, de acuerdo a la cantidad
>> de puertos que tenga en un txt que ya existe y funciona, deberian crearse
>> la cantidad de tabs y sus tablas internas para insertar alli de modo visual
>> lo que va llegando en cada puerto por separado en cada tab. Segun he estado
>> leyendo para eso tengo que olvidarme del modulo thread de python y trabajar
>> con el modulo Qthread de PyQt del que solo consegui documentacion en ingles
>> y realmente no soy muy bueno con ello, aparte de que es mi primera
>> aplicacion "compleja" real en la que trabajo y no estoy muy diestro. Si
>> alguien ha utilizado este modulo y me puede explicar como funciona estare
>> muy agradecido.
>>
>> Saludos
>>
>> --
>> Enrique A Villafañe
>>
>>
>>
>>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>

Yo hace unos años hice un proyecto similar para un cliente, donde una
aplicación en Python (y con UI hecha en PyQt) tenía que leer y escribir
tramas en el puerto serie. No puedo mostrar código pero recuerdo que en ese
entonces no utilicé QThread sino Threading de Python solamente y no tuve
problemas en actualizar la UI. El tema está en utilizar Queue adecuadamente
y mínimamente me sirvió.

Así como comenta Gabriel, las interfaces de QThread de PyQt son bastante
similares (sino iguales) a las de Thread de Python pero con agregados
copados como las señales. Por ejemplo, una porción de código que encontré y
modifiqué era algo como:

class CalcularWorker(QtCore.QObject):
    def __init__(self):
        pass

class MainWindow(QtGui.QMainWindow):
    ...

    calcular_thread = QtCore.QThread(self)                    # Instanciar
un QThread
    calcular_worker = CalcularWorker(1, 2, 3)                 # Instanciar
un worker para que realice el cálculo heavy
    calcular_worker.moveToThread(calcular_thread)      # Mover cálculo
heavy al thread

   calcular_thread.finished.connect(lambda: self.hacer_algo_al_terminar())
   # Al finalizar ejecución del thread, hacer algo.
   calcular_thread.start()     # Ejecutar thread.


Dependiendo del caso, fijate si te conviene crear una nueva clase que
herede de QThread y en esa clase implementar el método "run" o simplemente
instanciar un QThread y pasarle como argumento la función.

Saludos.

-- 

*Sebastián J. Seba*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150711/f6fad4e6/attachment.html>


More information about the pyar mailing list