Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: fortil en Agosto 13, 2013, 02:59:54 PM

Título: [SOLUCIONADO] Haciendo un contador en formato hora
Publicado por: fortil en Agosto 13, 2013, 02:59:54 PM
Hola a todos(as)

Resulta que estoy tratando de hacer un contador que se muestre en formato hora, mi idea es no hacerlo tan complicado, pero como estoy trabajando en PyQT4 no sé si sea eso o porque se me han olvidado los bucles mas sencillos.

en fin

este es el código del programa.

Código (python) [Seleccionar]

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

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

def __init__(self):
super(Example, self).__init__()
self.initUI()

def initUI(self):

self.lcd = QtGui.QLCDNumber(self)
self.lcd.setGeometry(30, 40, 200, 25)

self.btn = QtGui.QPushButton('Start', self)
self.btn.move(40, 80)
self.btn.clicked.connect(self.doAction)

self.timer = QtCore.QBasicTimer()
self.step = 0

self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('QtGui.QLCDNumber')
self.show()

def timerEvent(self, e):

h = 0
m = 0

if self.step < 100:
if self.step < 60:
self.step = self.step + 1
self.lcd.display("%d:%d:%d" % (h,m,self.step))
if self.step >= 60:
m += 1
self.step = 0
self.lcd.display("%d:%d:%d" % (h,m,self.step))
if m >= 60:
h += 1
m = 0
self.lcd.display("%d:%d:%d" % (h,m,self.step))

def doAction(self):

if self.timer.isActive():
self.timer.stop()
self.btn.setText('Start')
else:
self.timer.start(10, self)
self.btn.setText('Stop')

def main():

app = QtGui.QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

if __name__ == '__main__':
main()


En realidad lo que he tratado de modificar por todos lados es esta pequeña pero tediosa parte
Código (python) [Seleccionar]

def timerEvent(self, e):

h = 0
m = 0

if self.step < 100:
if self.step < 60:
self.step = self.step + 1
self.lcd.display("%d:%d:%d" % (h,m,self.step))
if self.step >= 60:
m += 1
self.step = 0
self.lcd.display("%d:%d:%d" % (h,m,self.step))
if m >= 60:
h += 1
m = 0
self.lcd.display("%d:%d:%d" % (h,m,self.step))

Ya que el contador comienza y cuando está en minuto 1, vuelve y se pone a 0, así esté bien el segundero

gracias
Título: Re:[Ayuda] Haciendo un contador en formato hora
Publicado por: WhiZ en Agosto 13, 2013, 03:45:01 PM
Hola! Acá te dejo el code funcionando. Le podrías agregar una opción para reiniciar el conteo si se desea ;).

Código (python) [Seleccionar]
#!/usr/bin/python
#-- coding: utf-8 --

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):

        self.lcd = QtGui.QLCDNumber(self)
        self.lcd.setGeometry(30, 40, 200, 25)

        self.btn = QtGui.QPushButton('Start', self)
        self.btn.move(40, 80)
        self.btn.clicked.connect(self.doAction)

        self.timer = QtCore.QBasicTimer()
        self.step = 0
        self.s = 0
        self.h = 0
        self.m = 0

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QtGui.QLCDNumber')
        self.show()

    def timerEvent(self, e):
               
        if self.step >= 100:
            self.step = 0
            if self.s < 60:
                self.s += 1
                self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
            else:
                self.s = 0
                if self.m < 60:
                    self.m += 1
                    self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
                else:
                    self.m = 0
                    self.h += 1
                    self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
        else:
            self.step += 1

    def doAction(self):

        if self.timer.isActive():
            self.timer.stop()
            self.btn.setText('Start')
        else:
            self.timer.start(10, self)
            self.btn.setText('Stop')

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
        main()


Fijate que en tu code confundiste el step con el segundo, el segundo con el minuto y el minuto con la hora.
Además creaste las variables h y m dentro del método que ataja al evento, por lo que cada vez que aumentaba el valor de step, a h y m se les asignaba el valor 0.

Saludos!
WhiZ

EDITO: Ah! otra cosa. Como dijiste que lo querías en formato hora, el contador no tiene límite para la misma, es decir, no está configurado para reiniciar la variable hora cuando su valor supera los 24. Supuse que así lo querías, pero si lo querés cambiar sólo tenés que hacer lo mismo que veníamos haciendo para las centésimas, los segundos y los minutos.
Título: Re:[Ayuda] Haciendo un contador en formato hora
Publicado por: fortil en Agosto 13, 2013, 03:58:32 PM
gracias amigo


Si yo creo que el problema era definir las variables dentro del mismo método, algo me sospechaba


muchas gracias
Título: Re:[Ayuda] Haciendo un contador en formato hora
Publicado por: WhiZ en Agosto 13, 2013, 04:03:00 PM
jeje me cope y le agregué algunas cosas :)

Código (python) [Seleccionar]
#!/usr/bin/python
#-- coding: utf-8 --

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):

        self.lcd = QtGui.QLCDNumber(self)
        self.lcd.setGeometry(30, 40, 200, 25)
        self.lcd.display('0:0:0')

        self.btnIniciar = QtGui.QPushButton('Start', self)
        self.btnIniciar.move(28, 80)
        self.btnIniciar.clicked.connect(self.doAction)

        self.btnReiniciar = QtGui.QPushButton('Restart', self)
        self.btnReiniciar.move(145, 80)
        self.btnReiniciar.clicked.connect(self.restart)

        self.timer = QtCore.QBasicTimer()
        self.c = 0  # centésima
        self.s = 0  # segundo
        self.h = 0  # minuto
        self.m = 0  # hora

        self.setGeometry(550, 350, 260, 150)
        self.setWindowTitle('QtGui.QLCDNumber')
        self.show()

    def timerEvent(self, e):
               
        if self.c >= 100:
            self.c = 0
            if self.s < 60:
                self.s += 1
                self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
            else:
                self.s = 0
                if self.m < 60:
                    self.m += 1
                    self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
                else:
                    self.m = 0
                    self.h += 1
                    self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))
        else:
            self.c += 1

    def doAction(self):

        if self.timer.isActive():
            self.timer.stop()
            self.btnIniciar.setText('Start')
        else:
            self.timer.start(10, self)
            self.btnIniciar.setText('Stop')
           
    def restart(self):
        self.c = 0
        self.s = 0
        self.m = 0
        self.h = 0
        self.lcd.display("%d:%d:%d" % (self.h,self.m,self.s))

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
        main()


Saludos!
WhiZ