[SOLUCIONADO] Haciendo un contador en formato hora

Iniciado por fortil, Agosto 13, 2013, 02:59:54 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 13, 2013, 02:59:54 PM Ultima modificación: Mayo 03, 2014, 11:44:40 AM por Flemon
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

#!/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

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

Agosto 13, 2013, 03:45:01 PM #1 Ultima modificación: Agosto 13, 2013, 03:49:44 PM por WhiZ
Hola! Acá te dejo el code funcionando. Le podrías agregar una opción para reiniciar el conteo si se desea ;).

Código: python
#!/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.


gracias amigo


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


muchas gracias

jeje me cope y le agregué algunas cosas :)

Código: python
#!/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