[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