[Python-mx] Dudas sobre hilos (Pyqt4)

Hiram hiramhzr at gmail.com
Fri Apr 1 19:32:58 EDT 2016


Muchas gracias por la información,

Estuve viendo algunos ejemplos y pude actualizar la imagen desde el hilo
principal, la actualizo cuando el hilo secundario me cambia una bandera leo
esa variable y logro cambiar la imagen, el problema es que no se como poder
ejecutar la función que cambia la función cada n tiempo sin usar otro hilo
ya que si lo genero vuelve a pasar lo mismo, acá un poco de código de lo
que comento.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from time import strftime
import time
import threading
import subprocess
from PyQt4.QtGui import QApplication

class cambiarImagen(threading.Thread):
    def __init__(self, parent):
           threading.Thread.__init__(self)
           self.parent = parent

    def run(self):
        while(True):
            time.sleep(0.5)
            self.parent.ok = self.parent.cambio()
            print self.parent.ok


class mainWin(QtGui.QMainWindow):
    def __init__(self):
        super(mainWin, self).__init__()
        self.initUI()
        self.esS = cambiarImagen(self)
        self.esS.daemon = True
        self.esS.start()
        self.ok = True
        QtCore.QTimer.singleShot(2000, self.runLoop)

    def initUI(self):
        self.imgCobrar = QtGui.QLabel(self)
        self.imgCobrar.setPixmap(QtGui.QPixmap("ok.png"))
        self.imgCobrar.move(0,5)
        self.imgCobrar.resize(96, 96)

        self.setGeometry(300, 300, 200, 240)
        self.setWindowTitle('Test')
        self.show()

    def runLoop(self):
        print 'lo ejecute desde el hilo principal'
        if self.ok == False:
            self.imgCobrar.setPixmap(QtGui.QPixmap("no.png"))
            QtGui.qApp.processEvents()
        else:
            print 'No cambio la imagen'

    def cambio(self):
        print 'lo ejecute desde el hilo secundario'
        if self.ok == True:
            return False
        else:
            return True
        #from time import sleep
        #self.imgCobrar.setPixmap(QtGui.QPixmap("no.png"))
        #QtGui.qApp.processEvents()
        #sleep(1)

def main():
    app = QtGui.QApplication(sys.argv)
    ex = mainWin()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Ahora la situación es como ejecutar la función runLoop cada cierto tiempo
desde el hilo principal.

Desde ya muchas gracias.
--
Hiram
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-mx/attachments/20160401/a0293933/attachment.html>


More information about the Python-mx mailing list